GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Automatisches Starten von Diensten im Docker-Container

BEARBEITEN:Ich habe viel über Docker gelernt, seit ich diese Antwort ursprünglich gepostet habe. „Dienste automatisch in Docker-Containern starten“ ist kein gutes Nutzungsmuster für Docker. Verwenden Sie stattdessen etwas wie Fleet, Kubernetes oder sogar Monit/SystemD/Upstart/Init.d/Cron, um automatisch Dienste zu starten, die in Docker-Containern ausgeführt werden.

URSPRÜNGLICHE ANTWORT:Wenn Sie den Container mit dem Befehl /bin/bash starten , dann können Sie dies auf die hier beschriebene Weise erreichen:https://stackoverflow.com/a/19872810/2971199

Also, wenn Sie den Container mit docker run -i -t IMAGE /bin/bash starten und wenn Sie apache2 automatisch starten möchten, wenn der Container gestartet wird, bearbeiten Sie /etc/bash.bashrc in den Container und fügen Sie /usr/local/apache2/bin/apachectl -f /usr/local/apache2/conf/httpd.conf hinzu (oder was auch immer Ihr Apache2-Startbefehl ist) zu einem Zeilenumbruch am Ende der Datei.

Speichern Sie die Änderungen an Ihrem Bild und starten Sie es mit docker run -i -t IMAGE /bin/bash neu und Sie werden feststellen, dass Apache2 ausgeführt wird, wenn Sie es anhängen.


Ich schätze, das kannst du nicht. Was Sie tun können, ist, ein Image mit einem Dockerfile zu erstellen und darin eine CMD zu definieren, die ausgeführt wird, wenn der Container gestartet wird. Sehen Sie sich die Builder-Dokumentation für die Grundlagen an (https://docs.docker.com/reference/builder/) und finden Sie unter Automatisches Ausführen eines Dienstes in einem Docker-Container Informationen darüber, wie Sie Ihren Dienst am Laufen halten.

Sie müssen dies nicht mit einem Dockerfile automatisieren. Sie können das Image auch wie gewohnt über einen manuellen Commit erstellen und es über die Befehlszeile ausführen. Dann geben Sie den Befehl an, der ausgeführt werden soll (genau das, was die Dockerfile-CMD tatsächlich tut). Sie können die Dockerfiles-CMD auch auf diese Weise überschreiben:Es wird nur die neueste CMD ausgeführt, was der Befehlszeilenbefehl ist, wenn Sie den Container damit starten. Der grundlegende docker run -i -t base /bin/bash Befehl aus der Dokumentation ist ein Beispiel. Wenn Ihr Befehl zu lang wird, können Sie natürlich ein praktisches Skript erstellen.


Eine Option, die Sie verwenden könnten, wäre die Verwendung eines Prozessmanagers wie Supervisord, um mehrere Prozesse auszuführen. Jemand hat dies mit sshd und mongodb erreicht:https://github.com/justone/docker-mongodb


Linux
  1. Die Ausgabe des Befehls „docker stats“ verstehen

  2. Docker-Befehl nicht gefunden

  3. Leiten Sie den Host-Port an den Docker-Container weiter

  4. Erkunden des Dateisystems des Docker-Containers

  5. Docker in Docker kann Volume nicht mounten

So listen / starten / stoppen Sie Docker-Container

So verwenden Sie den Docker Run-Befehl mit Beispielen

So führen Sie SSH in einen Docker-Container ein

So verwalten Sie Docker-Container

Docker-Container auflisten / starten / stoppen / löschen

Befehl unter Linux automatisch wiederholen