Szukaj…


Uwagi

Zwykle każdy kontener powinien obsługiwać jeden proces. Jeśli potrzebujesz wielu procesów w jednym kontenerze (np. Serwerze SSH, aby zalogować się do działającej instancji kontenera), możesz wymyślić własny skrypt powłoki, który uruchamia te procesy. W takim przypadku SIGNAL sam zadbać o obsługę SIGNAL (np. Przekierowanie złapanego SIGINT do procesów potomnych skryptu). Tak naprawdę nie tego chcesz. Prostym rozwiązaniem jest użycie supervisord jako procesu rootowania kontenerów, który dba o obsługę SIGNAL i jego żywotność procesów potomnych.

Pamiętaj jednak, że nie jest to „sposób dokowania”. Aby osiągnąć ten przykład w sposób dokowania, należy zalogować się do docker host (maszyny, na której działa kontener) i uruchomić polecenie docker exec -it container_name /bin/bahs . To polecenie otwiera powłokę wewnątrz kontenera, tak jak zrobiłby to ssh.

Dockerfile + supervisord.conf

Aby uruchomić wiele procesów, np. Serwer WWW Apache wraz z demonem SSH w tym samym kontenerze, możesz użyć supervisord .

Utwórz plik konfiguracyjny supervisord.conf , taki jak:

[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"

Następnie utwórz plik Dockerfile taki jak:

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"]

Następnie możesz zbudować swój wizerunek:

docker build -t supervisord-test .

Następnie możesz go uruchomić:

$ 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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow