Het probleem hier is uw aanpak. Docker heeft geen init systeem zoals je gewend bent op traditionele systemen. Wat docker doet is vervangen PID 1 met het proces dat u opgeeft in de CMD
of ENTRYPOINT
Dockerfile-opdrachten. Negeer voorlopig ENTRYPOINT
, omdat het vervangt wat uw CMD
wordt uitgevoerd met (normaal gesproken is het /bin/sh -c
). U moet docker instrueren om uw mongod-service in uw Docker-bestand te starten met de CMD
commando, zoals:
CMD usr/bin/mongod
En wanneer je je container uitvoert, zal mongod je PID 1 zijn. Nu vraag je je waarschijnlijk af:"Maar hoe zit het met mijn SSH-server?" en het antwoord is:voer geen SSH-server uit op uw docker-containers. Er zijn zijn sommige gevallen waarin het draaien van een SSH-server oké is, maar bijna alle "normale" redenen (debug, C&C, enz.) worden teniet gedaan met de "best practice" om een shell op uw container te krijgen:
docker exec -it myContainer /bin/bash
Dit zal je in een schelp op je lopende container laten vallen. De aanbeveling hier voor het beheren van configuratie en wijzigingen in uw docker-container is om zoiets als Ansible te gebruiken. Onthoud echter dat docker-containers kortstondig zijn en dat u services niet opnieuw moet opstarten en de configuratiestatus ervan moet wijzigen. Als u een configuratiewijziging nodig hebt, wijzigt u de Dockerfile- of configuratiegegevens en start u een nieuwe container. Veel geluk! Hier
is wat meer informatie over Dockerizing MongoDB, maar houd er rekening mee dat de daar beschreven methode het ENTRYPOINT
verandert in de Dockerfile, die iets ingewikkelder is en een beter begrip vereist van wat er in Dockerfiles gebeurt.