Поиск…


замечания

Обычно в каждом контейнере должен быть один процесс. Если вам нужно несколько процессов в одном контейнере (например, SSH-сервер для входа в ваш экземпляр запущенного контейнера), вы можете получить идею написать собственный сценарий оболочки, который запускает эти процессы. В этом случае вам нужно было позаботиться об обработке SIGNAL самостоятельно (например, перенаправление пойманного SIGINT дочерним процессам вашего скрипта). Это не то, что вы хотите. Простое решение - использовать supervisord в качестве корневого процесса контейнеров, который заботится об обработке SIGNAL и о продолжительности его дочерних процессов.

Но имейте в виду, что это не «путь докеров». Чтобы достичь этого примера на докере, вы должны войти в docker host (машина, на которой запущен контейнер) и запустить docker exec -it container_name /bin/bahs . Эта команда открывает оболочку внутри контейнера, как это делает ssh.

Dockerfile + supervisord.conf

Чтобы запустить несколько процессов, например, веб-сервер Apache вместе с демоном SSH внутри одного и того же контейнера, вы можете использовать supervisord .

Создайте свой файл конфигурации supervisord.conf например:

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

Затем создайте Dockerfile например:

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

Затем вы можете создать свой образ:

docker build -t supervisord-test .

После этого вы можете запустить его:

$ 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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow