Suche…


Bemerkungen

Normalerweise sollte jeder Container einen Prozess enthalten. Falls Sie mehrere Prozesse in einem Container benötigen (z. B. einen SSH-Server, um sich bei Ihrer laufenden Containerinstanz anzumelden), könnten Sie die Idee haben, ein eigenes Shellskript zu schreiben, das diese Prozesse startet. In diesem Fall mussten Sie sich um die Behandlung des SIGNAL kümmern (z. B. das Weiterleiten eines erfassten SIGINT an die untergeordneten Prozesse Ihres Skripts). Das ist nicht wirklich das, was du willst. Eine einfache Lösung besteht darin, supervisord als Container-Root-Prozess zu verwenden, der sich um die SIGNAL Verarbeitung und die Lebensdauer der SIGNAL Prozesse kümmert.

Beachten Sie jedoch, dass dies nicht der "Docker-Weg" ist. Um dieses Beispiel auf die Docker-Art zu erhalten, müssen Sie sich beim docker host (der Maschine, auf der der Container ausgeführt wird) anmelden und das docker exec -it container_name /bin/bahs . Dieser Befehl öffnet eine Shell im Container, wie dies bei ssh der Fall ist.

Dockerfile + supervisord.conf

Um mehrere Prozesse auszuführen, z. B. einen Apache-Webserver zusammen mit einem SSH-Dämon im gleichen Container, können Sie supervisord .

Erstellen Sie Ihre supervisord.conf Konfigurationsdatei wie folgt:

[supervisord]
nodaemon=true

[program:sshd]
command=/usr/sbin/sshd -D

[program:apache2]
command=/bin/bash -c "source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND"

Dann erstellen Sie eine Dockerfile wie:

FROM ubuntu:16.04
RUN apt-get install -y openssh-server apache2 supervisor
RUN mkdir -p /var/lock/apache2 /var/run/apache2 /var/run/sshd /var/log/supervisor
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
CMD ["/usr/bin/supervisord"]

Dann kannst du dein Image erstellen:

docker build -t supervisord-test .

Danach kannst du es ausführen:

$ docker run -p 22 -p 80 -t -i supervisord-test
2016-07-26 13:15:21,101 CRIT Supervisor running as root (no user in config file)
2016-07-26 13:15:21,101 WARN Included extra file     "/etc/supervisor/conf.d/supervisord.conf" during parsing
2016-07-26 13:15:21,112 INFO supervisord started with pid 1
2016-07-26 13:15:21,113 INFO spawned: 'sshd' with pid 6
2016-07-26 13:15:21,115 INFO spawned: 'apache2' with pid 7
...


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow