dockerでnginxを実行するときにdaemon offが使用される理由についての簡単な説明

dockerでnginxを実行するときにdaemon offが使用される理由についての簡単な説明

とても嬉しいです。この問題に遭遇したとき、私はDockerコンテナのプロセス原理について話さなければなりません。基本的に、Dockerについて学んだ人は、Dockerのいくつかの分離方法を知っており、プロセスも分離されています。

質問

1. 実行中に Docker コンテナがクラッシュするのはなぜですか?

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

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

以下では、例を挙げて、なぜそうするのかを説明します。 !

タッチファイルget_pid

echo "このスクリプトのPID: $$"
echo "このスクリプトのPPID: $PPID"
echo "このスクリプトのUID: $UID"
#nginx -g 'デーモンをオフ;'

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

odtoy:~ zhaojunlike$ `docker-machine env default` を評価します
godtoy:~ zhaojunlike$ cd ワークスペース/
godtoy:ワークスペース zhaojunlike$ ls
docker nodejs php pid_get
godtoy:ワークスペース zhaojunlike$ vim pid_get 
godtoy:ワークスペース zhaojunlike$ docker run -v `pwd`/pid_get:/pid_get:ro --rm --workdir=/ nginx bash /pid_get
このスクリプトの PID: 1
このスクリプトの PPID: 0
このスクリプトの UID: 0
godtoy:ワークスペース zhaojunlike$

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

したがって、コンテナがクラッシュしないようにするには、非デーモン実行が必須です。もちろん、コンテナ内で実行することもできます。

godtoy:ワークスペース zhaojunlike$ docker run -it nginx bash
ルート@a8baa5fe77f0:/#
root@a8baa5fe77f0:/# godtoy:WorkSpace zhaojunlike$

-it パラメータを使用してコンテナ内のパイプラインに接続し、コンテナ内で nginx コマンドを使用します。最後に、 Ctrl+P+Qコンテナを終了した後も、コンテナはまだ実行されています。

要約する

docker で node を使用する必要がある場合、pm2 などのツールをインストールする必要はありません。node を直接実行するだけです。コンテナがクラッシュするのではないかと心配な場合は、 ` docker run .... --restart=always などの restart およびその他の関連パラメータを追加できます。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • docker で nginx+php+mysql を設定する方法
  • 無効な Nginx クロスドメイン設定 Access-Control-Allow-Origin の解決策
  • Nginx に React プロジェクトをデプロイする方法の例
  • nginx.conf ファイルの構文強調表示とフォーマット設定には nginx.vim ツールを使用します。
  • nginx 設定チュートリアルにおける add_header の落とし穴の詳細な説明
  • nginx プロキシ サーバーで双方向証明書検証を構成する方法
  • Nginx プロキシ使用時にヘッダーに「_」が含まれることで情報が失われる問題の解決方法
  • シェルスクリプト nginx 自動化スクリプト
  • DockerでNginxサーバーを作成する方法
  • nginx proxy_cache バッチキャッシュクリアスクリプトの紹介

<<:  Reactはルーティングを使用してログインインターフェースにリダイレクトします

>>:  MySQLのスイッチングデータ保存ディレクトリの実装方法

推薦する

よく知られているブラウザのDOCTYPEモード選択メカニズム

ドキュメントの範囲この記事では、Firefox やその他の Gecko ベースのブラウザ、Safar...

Windows Server 2008 のサーバー パフォーマンス監視に関するチュートリアル

次に、ログ管理、ログのアーカイブ、ログのトラブルシューティング、イベントの転送と収集のためのコンピュ...

VMware 仮想マシンで HTTP サービスを確立して分析する手順

1. xshell を使用して仮想マシンに接続するか、仮想マシンに直接コマンドを入力します。以下はx...

Vue+video.jsはビデオプレイリストを実装します

この記事では、ビデオプレイリストを実装するためのvue + video.jsの具体的なコードを参考ま...

QQブラウザ機能を実装するためのCSS

コード知識ポイント1. fullpage.jsを組み合わせてフルスクリーンスクロールを実現する2. ...

CSS 表示属性のインラインブロックレイアウト実装の詳細な説明

CSS 表示プロパティ注: !DOCTYPE が指定されている場合、Internet Explore...

Docker ビルド PHP 環境チュートリアル詳細説明

Dockerのインストール公式インストールスクリプトを使用して最新バージョンのDockerをインスト...

vmware14Pro で Ubuntu システム インターフェイスが小さすぎる問題の解決方法の詳細な説明

1. 動作環境vmware14proウブントゥ 16.04LTS 2. 問題の説明vmware14P...

Windows 7 64 ビットに最新バージョンの MySQL サーバーをインストールする方法のグラフィック チュートリアル

最近、MySQL データベースを勉強していて、設定ファイルを頻繁に変更したため、MySQL データベ...

CSS に基づいて MaterialUI ボタン​​クリックアニメーションを実装し、それを React コンポーネントにカプセル化します。

序文フロントエンドフレームワークのヘビーユーザーとして、私はテクノロジーを選択する際にそのエコロジー...

Mysql general_log をクリーンアップする方法の概要

方法1: グローバル general_log を 'OFF' に設定します。 テーブ...

MySql における特殊演算子の使用の概要

序文MySQL には次の 4 種類の演算子があります。算術演算子比較演算子論理演算子ビット演算子これ...

Kali Linux システムのバージョンを確認する方法

1. Kali Linuxシステムのバージョンを確認するコマンド: cat /etc/issue 2...

MySQL スケジュールされたデータベース バックアップ操作の例

この記事では、MySQL のスケジュールされたデータベース バックアップ操作の例について説明します。...

CSS の div の下の同じ行にある複数の要素を右揃えにする

方法1:フロート:右さらに、フローティングにするとレイアウトがよりコンパクトになります(隙間がなくな...