コンテナの場合、最も単純なヘルスチェックはプロセス レベルのヘルスチェックであり、プロセスが稼働しているかどうかを確認します。 Docker Daemon はコンテナ内の PID1 プロセスを自動で監視します。docker run コマンドで再起動ポリシーを指定すれば、終了したコンテナをポリシーに従って自動的に再起動することができます。多くの実際のシナリオでは、プロセスレベルのヘルスチェック メカニズムのみを使用するだけでは十分ではありません。たとえば、コンテナ プロセスは実行中であるものの、アプリケーションのデッドロックによりユーザー要求に応答し続けることができません。このような問題は、プロセス監視では検出できません。 通常、停電や異常シャットダウン後にコンテナが自動的に起動できなくなるのを防ぐために、 --restart=常に 例えば [root@aliyun ~]# docker run --restart=always -d --name blog -d -v /www:/www -v /wwwlogs:/var/log/wwwlogs -p 65423:65422 -p 80:80 -p 443:443 677 7714a84063ee6d405c80b891254bba0e5930f5d271c5ad76cfd6e2f0058d8056 この方法では、コンテナを自動的に再起動できますが、プログラムがデッドロック状態や無限ループ状態になり、アプリケーションプロセスが終了しないのにコンテナがサービスを提供できなくなることがあります。 1.12 より前では、Docker はコンテナのこの状態を検出せず、再スケジュールも行わないため、一部のコンテナはサービスを提供できないものの、ユーザー要求は引き続き受け付けることになります。 1.12 以降、Docker は HEALTHCHECK 命令を提供しています。これは、コンテナのメイン プロセスのサービス ステータスがまだ正常であるかどうかを判断するためのコマンド ラインを指定し、コンテナの実際のステータスをより現実的に反映します。 イメージに HEALTHCHECK 命令が指定されると、コンテナはそれに従って起動されます。初期状態は起動中です。HEALTHCHECK 命令のチェックが成功すると正常状態に変わります。一定回数連続して失敗すると、異常状態に変わります。 HEALTHCHECK は次のオプションをサポートしています。
HEALTHCHECK [option] CMDに続くコマンドはENTRYPOINTと同じ形式ですが、シェル形式とexec形式に分けられます。コマンドの戻り値によって、ヘルス チェックが成功したかどうかが決まります。0: 成功、1: 失敗、2: 予約済み、この値は使用しないでください。 このdockerfileファイルを見てみましょう Centosより LABEL 管理者 "awen メール: <[email protected]>" ワークディレクトリ /opt/ CentOS7-Base-163.repo を /etc/yum.repos.d/CentOS-Base.repo にコピーします。 nginx /etc/init.d/nginx をコピーします 環境変数 NGINX_V=1.13.5 \ OPENSSL_V=1.0.2l \ PCRE_V=8.41 \ ZLIB_V=1.2.11 yum -y update を実行します\ && yum -y インストール openssh-server openssl gcc gcc-c++ pcre-devel openssl-devel zlib-devel wget make perl tar net-tools \ && wget -c -4 https://nginx.org/download/nginx-$NGINX_V.tar.gz \ && wget -c -4 https://www.openssl.org/source/openssl-$OPENSSL_V.tar.gz \ && wget -c -4 ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-$PCRE_V.tar.gz \ && wget -c -4 http://zlib.net/zlib-$ZLIB_V.tar.gz \ && グループアド -r www && ユーザーアド -r -g www www \ && tar zxvf zlib-$ZLIB_V.tar.gz \ && cd zlib-$ZLIB_V \ && ./configure \ && 作る \ && インストール \ && cd /opt \ && tar zxvf pcre-$PCRE_V.tar.gz \ && cd pcre-$PCRE_V \ && ./configure \ && 作る \ && インストール \ && cd /opt \ && tar zxvf openssl-$OPENSSL_V.tar.gz \ && tar zxvf nginx-$NGINX_V.tar.gz \ && cd nginx-$NGINX_V \ && ./configure --prefix=/usr/local/nginx --user=www --group=www --with-pcre=/opt/pcre-$PCRE_V --with-http_ssl_module --with-zlib=/opt/zlib-$ZLIB_V --with-openssl=/opt/openssl-$OPENSSL_V --with-http_v2_module --with-http_ssl_module \ && 作る \ && インストール \ && rm -rf /opt/* \ && mkdir -p /usr/local/nginx/ssl \ && mkdir -p /usr/local/nginx/conf/vhost \ && mkdir -p /var/log/wwwlogs/ \ && mkdir -p /www/ \ && ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N '' \ && ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N '' \ && ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N '' \ && ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N '' \ && echo "RSAAuthentication yes" >> /etc/ssh/sshd_config \ && echo "PubkeyAuthentication yes" >> /etc/ssh/sshd_config \ && sed -i "s/PasswordAuthentication yes/PasswordAuthentication no/g" /etc/ssh/sshd_config \ && sed -i "s/UsePAM yes/UsePAM no/g" /etc/ssh/sshd_config \ && sed -i "s/#ポート22/ポート65422/g" /etc/ssh/sshd_config \ && yum すべてをクリーンアップ \ && mkdir /var/run/sshd \ && chmod +x /etc/init.d/nginx \ && rm -rf /root/*.cfg \ && echo "アジア/上海" > /etc/localtime ssl/* をコピー /usr/local/nginx/ssl/ コピー vhost/* /usr/local/nginx/conf/vhost/ nginx.conf をコピー /usr/local/nginx/conf/ コピー ssh/* /root/.ssh/ ボリューム ["/www","/var/log/wwwlogs","/usr/local/nginx/ssl","/usr/local/nginx/conf/vhost"] エクスポーズ 65422 80 443 ヘルスチェック CMD curl -fs http://localhost/ || exit 1 エントリポイント /etc/init.d/nginx start && chown -R www:www /var/log/wwwlogs/ && /usr/sbin/sshd -D で ヘルスチェック CMD curl -fs http://localhost/ || exit 1 これは追加されたヘルスモニタリング構成で、コンパイルされて起動されます。プロセスを確認すると、そのステータスが開始中であることがわかります。 [root@aliyun ~]# docker ps -a コンテナID イメージ コマンド 作成ステータス ポート名 7714a84063ee 677 "/bin/sh -c '/etc/ini" 3 秒前 2 秒前に起動 (ヘルス: 開始) 0.0.0.0:80->80/tcp、0.0.0.0:443->443/tcp、0.0.0.0:65423->65422/tcp ブログ しばらく待つと、その状態が正常であることがわかります [root@aliyun ~]# docker ps -a コンテナID イメージ コマンド 作成ステータス ポート名 7714a84063ee 677 "/bin/sh -c '/etc/ini" 約 1 分前 起動 約 1 分 (正常) 0.0.0.0:80->80/tcp、0.0.0.0:443->443/tcp、0.0.0.0:65423->65422/tcp ブログ 検査を通じて過去3回のステータスを見ることができます [root@aliyun ~]# docker inspect --format '{{json .State.Health}}' ブログ | python -m json.tool { 「失敗連続」: 0, 「ログ」: [ { 「終了」: 「2017-10-11T11:15:27.516562686+08:00」、 「終了コード」: 0, 「出力」: 「<html>\r\n<head><title>301 永久に移動されました</title></head>\r\n<body bgcolor=\"white\">\r\n<center><h1>301 永久に移動されました</h1></center>\r\n<hr><center>nginx</center>\r\n</body>\r\n</html>\r\n」、 「開始」: 「2017-10-11T11:15:27.470554485+08:00」 }, { 「終了」: 「2017-10-11T11:15:57.563377729+08:00」、 「終了コード」: 0, 「出力」: 「<html>\r\n<head><title>301 永久に移動されました</title></head>\r\n<body bgcolor=\"white\">\r\n<center><h1>301 永久に移動されました</h1></center>\r\n<hr><center>nginx</center>\r\n</body>\r\n</html>\r\n」、 「開始」: 「2017-10-11T11:15:57.516690754+08:00」 }, { 「終了」: 「2017-10-11T11:16:27.609685416+08:00」、 「終了コード」: 0, 「出力」: 「<html>\r\n<head><title>301 永久に移動されました</title></head>\r\n<body bgcolor=\"white\">\r\n<center><h1>301 永久に移動されました</h1></center>\r\n<hr><center>nginx</center>\r\n</body>\r\n</html>\r\n」、 「開始」: 「2017-10-11T11:16:27.563533362+08:00」 }, { 「終了」: 「2017-10-11T11:16:57.654441173+08:00」、 「終了コード」: 0, 「出力」: 「<html>\r\n<head><title>301 永久に移動されました</title></head>\r\n<body bgcolor=\"white\">\r\n<center><h1>301 永久に移動されました</h1></center>\r\n<hr><center>nginx</center>\r\n</body>\r\n</html>\r\n」、 「開始」: 「2017-10-11T11:16:57.609810588+08:00」 }, { 「終了」: 「2017-10-11T11:17:27.701113019+08:00」、 「終了コード」: 0, 「出力」: 「<html>\r\n<head><title>301 永久に移動されました</title></head>\r\n<body bgcolor=\"white\">\r\n<center><h1>301 永久に移動されました</h1></center>\r\n<hr><center>nginx</center>\r\n</body>\r\n</html>\r\n」、 「開始」: 「2017-10-11T11:17:27.654580727+08:00」 } ]、 「ステータス」:「健康」 } ヘルスチェックが再試行回数を超えて連続して失敗すると、ステータスが (異常) に変わります。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: PID を作成できないために MySQL が起動できない問題を解決する方法
>>: JSベースの手持ち連射機能+テキスト揺れ特殊効果コードの簡単実装
1.サービスコマンドサービスコマンドは実際には/etc/init.dディレクトリに移動し、関連プログ...
場所表現タイプ~ は大文字と小文字を区別して通常の一致を実行することを示します~*は大文字と小文字を...
1. JDKをインストールする コンピュータの動作桁を確認します。 uname -ar 2017 x...
この記事では、ブロック崩しピンボールゲームを実装するためのJSの具体的なコードを参考までに紹介します...
システムの問題、アプリケーションの速度低下、または原因不明の問題をトラブルシューティングする場合、最...
Linux ターミナルでファイルを操作しているときに、Linux コマンドライン エディターでファイ...
必要最近、Node オンライン サービスを移行する必要があったため、2 つの新しいオンライン サーバ...
目次1. MySQLレプリケーション関連の概念2. シンプルな1マスター1スレーブアーキテクチャの実...
従来、開発者はインスタンスで必要になる可能性のあるデータに対して JavaScript クラス内にプ...
Redux はシンプルな状態マネージャーです。その歴史をたどることはしません。使用法の観点から見ると...
今日、仕事中に左結合に関するSQLの問題に遭遇しました。後で解決しましたが、この問題を通じてSQLの...
目次MySQLの大文字と小文字の区別はパラメータによって制御されますMySQLの大文字と小文字の区別...
1 分で最初の Web ページを作成します。簡単な Web ページを作ってみましょう。ぜひフォローし...
データベースの移行は、よく遭遇する問題です。データ量が少ない場合、移行は基本的に問題になりません。実...
ハードウェア上の理由により、機械は標準時間にある程度追いつけない場合があり、その誤差は 1 か月で数...