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のスイッチングデータ保存ディレクトリの実装方法

推薦する

CSS+SVGでBステーションの課金効果を実現するサンプルコード

困難SVG グラフィックの 2 つのマスクの作成まず、コード左側のピンク色のボックスの内容ですこれに...

CSS 等高レイアウトの一般的な方法

等高レイアウト同じ親コンテナー内の同じ高さの子要素のレイアウトを指します。等高レイアウトの実装の観点...

グリッドはページのレイアウトプランです

<br /> 英語原文: http://desktoppub.about.com/od/...

Vueのフロントエンドシステムとフロントエンドとバックエンドの分離の詳細な説明

目次概要フロントエンド知識システムフロントエンドの3つの要素プレゼンテーション層 (CSS)動作レイ...

MySQL ストアド プロシージャで if ステートメントを使用する詳細な例

この記事では、例を使用して、MySQL ストアド プロシージャでの if ステートメントの使用方法を...

JavaScript フォーム検証の例

HTML フォームは、名前、電子メール アドレス、場所、年齢などのユーザー情報を収集するためによく使...

CSS3 は 3D キューブの読み込み効果を作成します

簡単な説明これは CSS3 のクールな 3D キューブのプリロード効果です。この特殊効果は、シンプル...

CSS は Google マテリアル デザインのテキスト入力ボックス スタイルを実装します (推奨)

みなさんこんにちは。今日は、純粋な CSS を使用して Google マテリアル デザインのテキスト...

vsCodeはワンクリックでvueテンプレートを生成します

1. ショートカットCtrl + Shift + Pを使用してコンソールを呼び出します 2、「スニペ...

ディスク容量不足による MySQL レプリケーション障害の解決方法

目次ケースシナリオ問題を解決するまとめケースシナリオ本日、オンラインで問題が発見されました。監視範囲...

知っておくべき 7 つのネイティブ JS エラーの種類

目次概要1. 範囲エラー2. 参照エラー3. 構文エラー4. タイプエラー5. URIエラー6. 評...

Node.js で MySQL データベースにバッチデータを挿入する方法

プロジェクト(nodejs)では、一度に複数のデータをデータベースに挿入する必要があります。データベ...

知らないかもしれないmysqldumpパラメータ

前回の記事で、mysqldump バックアップ ファイルに記録されるタイムスタンプ データは UTC...

VueのSSRサーバーサイドレンダリング例の詳細な説明

サーバーサイドレンダリング (SSR) を使用する理由検索エンジンのクローラーが完全にレンダリングさ...

HTMLデータ送信投稿_PowerNode Java Academy

HTTP/1.1 プロトコルで指定されている HTTP リクエスト メソッドには、OPTIONS、...