web-dev-qa-db-ja.com

ヘルスチェックに基づいて正常でないドッカーコンテナを再起動する

Docker version 17.09.0-ceを使用しています.

コンテナを異常な状態に保つ代わりに、コンテナを再起動するオプションがありますか?.

30
Govind Kailas

不健康なコンテナ機能の再起動は元のPR( https://github.com/moby/moby/pull/22719 )にありましたが、議論の後に削除され、機能拡張として後で行われると見なされましたRestartPolicy。

現時点では、この回避策を使用して、不健康なコンテナを自動的に再起動できます。 https://hub.docker.com/r/willfarrell/autoheal/

サンプルの構成ファイルを次に示します。

version: '2'
services:
  autoheal:
    restart: always
    image: willfarrell/autoheal
    environment:
      - AUTOHEAL_CONTAINER_LABEL=all
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

これに対してdocker-compose up -dを実行するだけです

47
Navrocky

スタンドアロンコンテナの場合、ヘルスチェックの失敗時にコンテナを再起動するネイティブ統合はありませんが、Dockerイベントとスクリプトを使用して同じことを実現できます。ヘルスチェックはSwarmとより良く統合されています。ヘルスチェックがSwarmに統合されているため、サービス内のコンテナが異常な場合、Swarmは自動的に異常なコンテナをシャットダウンし、新しいコンテナを起動して、サービスのレプリカカウントで指定されたコンテナカウントを維持します。

3
Freax

Dockerには、コンテナーの状態に関する詳細を取得する方法がいくつかあります。ヘルスチェックと実行頻度を設定できます。また、httpなどのコンテナー内で実行されているアプリケーションでヘルスチェックを実行できます(これはcurl --failオプションを使用します)。health_statusイベントを表示して詳細を取得できます。

異常なコンテナの詳細については、inspectコマンドが便利です。docker inspect --format='{{json .State.Health}}' container-namehttps://blog.newrelic.com/2016/08/24/docker-health-check-instruction/)を参照してください 詳細については。)

最初に「異常」タグの原因となるエラー状態を解決する必要があります(ヘルスチェックコマンドが実行され、終了コード1を取得するたびに)。エラーに応じて、Dockerがコンテナを再起動する必要がある場合とそうでない場合があります。 コンテナが自動的に を起動/再起動する場合、起動エラーをトラップするか、エラーをログに記録し、ヘルスチェックステータスを使用すると、エラーに迅速に対処できます。自動起動に関心がある場合は、リンクを確認してください。

1
Lea Klein

https://codeblog.dotsandbrackets.com/docker-health-check/

コンテナを作成し、「restart:always」を追加します。

ヘルスチェックの使用では、次の点に注意してください。

スタンドアロンコンテナの場合、ヘルスチェックの失敗時にコンテナを再起動するネイティブ統合はありませんが、Dockerイベントとスクリプトを使用して同じことを実現できます。ヘルスチェックはSwarmとより良く統合されています。ヘルスチェックがSwarmに統合されているため、サービス内のコンテナが異常な場合、Swarmは自動的に異常なコンテナをシャットダウンし、新しいコンテナを起動して、サービスのレプリカカウントで指定されたコンテナカウントを維持します。

0
Freax