2016-08-09 5 views
4

ドッカーバージョン1.12、 は私が得た私はcheck_running.shシェルでアップデートし、健康診断をロールすることができるよDockerfileヘルス・チェック・コマンド(未Dockerfile中!)

FROM nginx:latest 

RUN touch /marker 

ADD ./check_running.sh /check_running.sh 
RUN chmod +x /check_running.sh 

HEALTHCHECK --interval=5s --timeout=3s CMD ./check_running.sh 

Hereからスクリプト。ここでは、check_running.shスクリプトはimageにコピーされているので、起動したコンテナにはそれがあります。

今、私の質問は、コンテナの外からもヘルスチェックにも何か方法があります。

コンテナのパフォーマンスを取得するためのヘルスチェックコマンドを除いて(私たちがスクリプトで書いた内容によります)、コンテナのパフォーマンスが悪い場合は、以前のバージョンにロールバックする必要があります。コンテナ、それが良いではない場合、それはロールバックをする必要があり、以前のに)Dockerfile HEALTHCHECKオプション、コンテナ内で実行するすべてのチェックでは使用できません

おかげ

答えて

3

に失敗したコマンドの出力を表示することができます健康にどのような方法があり、コンテナとも外側に位置 スクリプトのアウト側から確認してください。

コンテナを監視プロセスの種類、それが良くない場合、それはロールバックをする必要があり、以前の

にあなたは、いくつかのオプションがあります。

  1. 外から、あなたは、プロセスを実行しますドッカーエグゼクティブとその健康状態をチェックするためにコンテナの中にある。これはシェルコマンドの任意のシーケンスである可能性があります。スクリプトをコンテナの外に保持したい場合は、cat script.sh | docker exec -it container sh -sのようなものを使用します。
  2. コンテナの健康状態をコンテナの外側からチェックします。コンテナ内で実行するプロセスを探して(セキュリティプロファイルを設定してps -Zaxを使用するか、children of the daemonを探してみてください)、各コンテナに--user 12345という特定のユーザーIDを付けて、それを探します。そのサービスに接続します。あなたはそれが正しいコンテナの中で実行されていることを確認する必要があります。 /var/lib/docker/devicemapper/mnt/<hash>/rootfsの下にあるコンテナのファイルシステムにアクセスできます。
  3. コンテナ内にHEALTHCHECKを実行し、その健康状態をdocker inspect --format='{{json .State.Health.Status}}' <containername>で確認します。 Dockerfileの行: HEALTHCHECK CMD wget -q -s http://google.comコンテナを確認するにはインターネットにアクセスできます。

今後、他のツールと互換性が高い可能性が高いため、オプション3をお勧めします。

0

。私にとっては、ホスト上で直接実行される可能性のある信頼できないコードを回避し、コンテナ内のヘルスチェックの依存関係を含めることができるので、これは良いことです。

外部からコンテナを監視する必要がある場合は、別のツールまたは監視アプリケーションを使用する必要があります。そこにはかなりの数があります。

0

コンテナにdocker inspectを実行すると、ヘルスチェックの結果を表示できます。

アプリケーションに応じて、もう1つのアプローチは、ヘルスチェックもプローブするようにエンドポイントを公開することです。これにより、必要に応じて外部または内部でクエリを実行できます。

2

blogからのコメントが届きました!彼はDockerの文書HealthCheckセクションを参考にしました。 dockerfileのデフォルトを "上書き"するために、dockerのヘルスチェック "オプション"があります。私はまだチェックしていない!しかし、私が欲しいものを手に入れてもらえるといいですね。チェックして答えを更新します!

+1

'docker run --health-cmd ...'はDockerfileの 'HEALTHCHECK'の値を上書きしています。主にコンテナ内でスクリプトが実行される場所は変更されません。 – BMitch

0

ドッカーは、inspectコマンドを使用すると、成功するか

docker inspect --format='{{json .State.Health}}' your-container-name 
関連する問題