サーチ…


備考

通常、各コンテナは1つのプロセスをホストする必要があります。 1つのコンテナ(例えば、実行中のコンテナインスタンスにログインするためのSSHサーバ)に複数のプロセスが必要な場合は、それらのプロセスを開始する独自のシェルスクリプトを作成することができます。その場合は、自分自身を処理するSIGNAL注意を払わなければなりません(例えば、キャッチされたSIGINTをスクリプトの子プロセスにリダイレクトするなど)。それは本当にあなたが望むものではありません。シンプルな解決策は、 SIGNAL処理とその子プロセスの存続期間に注意を払うコンテナのルートプロセスとしてsupervisordを使用することです。

しかし、これは "ドッカーの道"ではないことを覚えておいてください。この例をdockerの方法で実現するには、 docker host (コンテナが動作するマシン)にログインし、 docker exec -it container_name /bin/bahsます。このコマンドは、sshが行うように、コンテナ内にシェルを開きます。

Dockerfile + supervisord.conf

同じコンテナ内にSSHデーモンと一緒にApache Webサーバーなどの複数のプロセスを実行するには、 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