ホームページ  >  記事  >  運用・保守  >  nginx の実行時に docker がデーモンをオフにする理由は何ですか?

nginx の実行時に docker がデーモンをオフにする理由は何ですか?

PHPz
PHPz転載
2023-06-02 19:32:133662ブラウズ

質問

1. Docker コンテナーが実行中にハングするのはなぜですか?

デフォルトでは、Docker コンテナーは、コンテナー内の最初のプロセス、つまり pid=1 のプログラムを、Docker コンテナーが実行されているかどうかの基準として使用します。Docker コンテナーの pid がハングすると、 docker コンテナは直接終了します。

2. docker を実行するときは、コンテナの内部コマンドとして command を使用します。nginx を使用する場合は、バックグラウンドで nginx プログラムが実行されます。この時点では、nginx は pid 1 のプログラムではありません。しかし、bashは実行されました このbashはnginxコマンドを実行するとハングするのでコンテナも終了します あなたと同じ理由で、pm2起動後、bashのpidは1であり、bashは実行後に終了するため、コンテナも終了します出る。

以下に例を使用して、なぜこれを行うのかを説明します。 !

touch file get_pid

echo "pid of this script: $$"
echo "ppid of this script: $ppid"
echo "uid of this script: $uid"
#nginx -g 'daemon off;'

この時点で、この sh ファイルを実行するためにコンテナを起動します。

odtoy:~ zhaojunlike$ eval `docker-machine env default`
godtoy:~ zhaojunlike$ cd workspace/
godtoy:workspace zhaojunlike$ ls
docker  nodejs  php  pid_get
godtoy:workspace zhaojunlike$ vim pid_get 
godtoy:workspace zhaojunlike$ docker run -v `pwd`/pid_get:/pid_get:ro --rm --workdir=/ nginx bash /pid_get
pid of this script: 1
ppid of this script: 0
uid of this script: 0
godtoy:workspace zhaojunlike$

コンテナが pid_get を実行した後、コンテナは自動的に終了しますが、このとき現在実行中の bash の pid が 1 として出力されます。

したがって、コンテナがハングしないようにしたい場合は、デーモン以外の実行が必須です。もちろん、コンテナ内で実行することもできます。

godtoy:workspace zhaojunlike$ docker run -it nginx bash
root@a8baa5fe77f0:/# nginx
root@a8baa5fe77f0:/# godtoy:workspace zhaojunlike$

-it を使用します。パラメータ コンテナ内のパイプに接続できるので、コンテナ内で nginx コマンドを使用します。最後にctrl p qコンテナを終了した後も、コンテナはまだ実行中です。

以上がnginx の実行時に docker がデーモンをオフにする理由は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。