platform docker

Dockerのhealthcheckについて調査しました。

環境

  • Docker Engine 26.0.0
  • Docker Compose version v2.25.0

healthcheckとは

DockerのhealthcheckはDockerコンテナがhealthy(正常)かどうかをチェックするために定義します。
具体的には、指定したコマンドを一定間隔で実行し、成功したらDockerコンテナはhealthyと判断されます。一定回数連続で失敗すると、unhealthyになります。(Dockerコンテナの初期状態はstarting)

healthcheckは Dockerfile または docker-compose.yml で定義できます。
docker-compose.yml で定義したhealthcheckは Dockerfile で定義したものを上書きします。

docker-compose.yml で定義できるhealthcheckの項目は以下の通りです。

項目 説明
test コンテナの状態をチェック(ヘルスチェック)するために実行されるコマンドです。コマンドは終了ステータスが0の場合成功、1の場合失敗とみなされます。
interval ヘルスチェックを実行する間隔です。
timeout 一回のヘルスチェックのタイムアウト時間です。ヘルスチェックの実行時間がこの値を超えると失敗になります。
retries ヘルスチェックのリトライ回数です。ヘルスチェックが連続でこの回数分失敗すると、コンテナはunhealthyとみなされます。
start_period コンテナのブートストラップのための初期化時間です。この時間中はヘルスチェックが何回失敗してもunhealthyになりません。この時間中にヘルスチェックが成功すると、初期化時間は終了します。
start_interval start_periodで定義された初期化時間の間、ヘルスチェックを実行する間隔です。

以下はhealthcheckの設定例です。

healthcheck:
  test: curl -f https://localhost || exit 1
  interval: 1m30s
  timeout: 10s
  retries: 3
  start_period: 40s
  start_interval: 5s

上記の例を説明すると、
curl -f https://localhost || exit 1 がヘルスチェックのコマンドです。
40秒の初期化時間の間、5秒間隔でヘルスチェックが実行されます。
初期化時間の終了後、1分30秒の間隔でヘルスチェックが実行されます。
1回のヘルスチェックは10秒でタイムアウトします。
ヘルスチェックが連続で3回失敗すると、コンテナはunhealthyとみなされます。