HEALTHCHECK
別名: ヘルスチェック / docker healthcheck / health check
Dockerfile の HEALTHCHECK 命令は、コンテナ内で定期的にコマンドを実行し、その終了コードでコンテナの健全性(healthy / unhealthy)を判定する仕組み。
プロセスの生存とサービスの応答は別物である点を埋める。
公開: 更新:
定義
HEALTHCHECK は、コンテナが「動いているだけ」ではなく「使える状態か」を判定するための Docker の仕組みです。
指定したコマンドをコンテナ内で定期実行し、終了コード 0 なら healthy、1 なら unhealthy として記録します。
プロセスが生きていてもアプリが応答しない状態を検出できます。
詳細
HEALTHCHECK --interval=10s --timeout=3s --start-period=30s --retries=3 \
CMD ["curl", "-f", "http://localhost:8080/health"]--start-period は起動が完了するまでの猶予で、この間の失敗は retries に数えません。
判定結果は docker inspect の State.Health に入り、直近の出力は Health.Log から読めます。
Compose では healthcheck: に同じ内容を書け、depends_on の condition: service_healthy と組み合わせると依存先が healthy になるまで起動を待たせられます。
よくある誤解
HEALTHCHECK は unhealthy になったコンテナを自動で再起動しません。
再起動は restart ポリシーやオーケストレータ側の役割です。
また判定に使うコマンドはコンテナ内で実行されるため、イメージに curl や wget が無ければ、書き方が正しくても常に unhealthy になります。
関連
常に unhealthy になる場合は Docker の HEALTHCHECK がいつも unhealthy になる、依存サービスの起動待ちについては docker compose の depends_on で起動順が待たれない を参照してください。
判定の元になる値は exit code です。