Recherche…


Remarques

Chaque conteneur devrait généralement héberger un processus. Si vous avez besoin de plusieurs processus dans un conteneur (par exemple, un serveur SSH pour vous connecter à votre instance de conteneur en cours d'exécution), vous pouvez avoir l'idée d'écrire votre propre script shell qui lance ces processus. Dans ce cas, vous devez faire attention à la gestion de SIGNAL par vous-même (par exemple, rediriger un SIGINT capturé vers les processus enfants de votre script). Ce n'est pas vraiment ce que vous voulez. Une solution simple consiste à utiliser supervisord tant que processus racine de conteneur qui prend en charge la gestion de SIGNAL et la durée de vie de ses processus enfants.

Mais gardez à l’esprit que ce n’est pas la "voie des dockers". Pour obtenir cet exemple dans le mode docker, connectez-vous à l' docker host (la machine sur laquelle le conteneur s'exécute) et exécutez docker exec -it container_name /bin/bahs . Cette commande vous ouvre un shell dans le conteneur comme le ferait ssh.

Dockerfile + supervisord.conf

Pour exécuter plusieurs processus, par exemple un serveur Web Apache avec un démon SSH dans le même conteneur, vous pouvez utiliser supervisord .

Créez votre fichier de configuration supervisord.conf comme:

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

Puis créez un Dockerfile comme:

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

Ensuite, vous pouvez construire votre image:

docker build -t supervisord-test .

Ensuite, vous pouvez l'exécuter:

$ 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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow