Problemet här är ditt tillvägagångssätt. Docker har inte ett init-system som du är van vid på traditionella system. Vad docker gör är att ersätta PID 1 med den process du anger i CMD
eller ENTRYPOINT
Dockerfile-kommandon. För nu, ignorera ENTRYPOINT
, eftersom det ersätter din CMD
körs med (normalt är det /bin/sh -c
). Du måste instruera docker att starta din mongod-tjänst i din Dockerfile med CMD
kommando, som:
CMD usr/bin/mongod
Och när du kör din container kommer mongod att vara din PID 1. Nu undrar du förmodligen vid det här laget "Men hur är det med min SSH-server?" och svaret är:Kör inte en SSH-server på dina dockercontainrar. Det finns vissa användningsfall där det är okej att köra en SSH-server, men nästan alla de "normala" orsakerna (felsökning, C&C, etc) upphävs med "bästa praxis" för att få ett skal på din behållare:
docker exec -it myContainer /bin/bash
Detta kommer att tappa dig i ett skal på din löpande behållare. Rekommendationen här för att hantera konfiguration och ändringar i din dockningsbehållare är att använda något som Ansible. Kom dock ihåg att docker-containrar är tillfälliga, och du bör inte starta om tjänster och ändra konfigurationstillstånd på dem. Om du behöver en konfigurationsändring ändrar du dockerfilen eller konfigurationsdatan och startar sedan en ny behållare. Lycka till! Här
är lite mer information om Dockerizing MongoDB, men kom ihåg att metoden som beskrivs där ändrar ENTRYPOINT
i Dockerfilen, som är lite mer involverad och kräver en bättre förståelse för vad som händer i Dockerfiles.