MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongod-Fehler des Docker-Containers beim Starten über ssh

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.