Docker はインスタンス分析からデーモンを使用して nginx を実行します

PHPz
リリース: 2023-06-03 14:04:12
転載
1612 人が閲覧しました

質問

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コンテナを終了した後も、コンテナはまだ実行中です。

以上がDocker はインスタンス分析からデーモンを使用して nginx を実行しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!