Das Problem hier ist Ihre Herangehensweise. Docker hat kein Init-System, wie Sie es von herkömmlichen Systemen gewohnt sind. Was Docker macht, ist replace PID 1 mit dem Prozess, den Sie in der CMD
angeben
oder ENTRYPOINT
Dockerfile-Befehle. Ignorieren Sie vorerst ENTRYPOINT
, weil es ersetzt, was Ihr CMD
ist ausgeführt wird (normalerweise ist es /bin/sh -c
). Sie müssen Docker anweisen, Ihren Mongod-Dienst in Ihrem Dockerfile mit dem CMD
zu starten Befehl, wie:
CMD usr/bin/mongod
Und wenn Sie Ihren Container ausführen, ist mongod Ihre PID 1. Nun fragen Sie sich wahrscheinlich an dieser Stelle:„Aber was ist mit meinem SSH-Server?“ und die Antwort lautet:Führen Sie keinen SSH-Server auf Ihren Docker-Containern aus. Es gibt Einige Anwendungsfälle, in denen das Ausführen eines SSH-Servers in Ordnung ist, aber fast alle "normalen" Gründe (Debug, C&C usw.) werden durch die "Best Practice" für das Erhalten einer Shell auf Ihrem Container zunichte gemacht:
docker exec -it myContainer /bin/bash
Dadurch werden Sie in eine Shell auf Ihrem laufenden Container versetzt. Die Empfehlung hier für die Verwaltung von Konfigurationen und Änderungen in Ihrem Docker-Container lautet, etwas wie Ansible zu verwenden. Denken Sie jedoch daran, dass Docker-Container kurzlebig sind und Sie keine Dienste neu starten und den Konfigurationsstatus auf ihnen ändern sollten. Wenn Sie eine Konfigurationsänderung benötigen, ändern Sie die Dockerfile- oder Konfigurationsdaten und starten Sie dann einen neuen Container. Viel Glück! Hier
finden Sie ein wenig mehr Informationen zum Dockerisieren von MongoDB, aber denken Sie daran, dass die dort beschriebene Methode den ENTRYPOINT
ändert in der Dockerfile, die etwas komplizierter ist und ein besseres Verständnis dafür erfordert, was in Dockerfiles vor sich geht.