説明
コンテナーが動いていても、サービスが正常に応答するとは限りません。適切な状態確認の基準が必要です。Compose の healthcheck を省略しても、イメージの HEALTHCHECK を継承する場合があるため、実際の設定を確認してください。
ヘルスチェックがないと、運用者やオーケストレーションが障害を認識するまでに時間がかかる場合があります。Web サービス、API、ワーカーなど、稼働状態が重要なサービスには適切なチェックを設定してください。
想定される影響
- 障害のあるサービスが正常に稼働しているように見える場合があります。
- 再起動やトラフィックの切り替えなどの対応が遅れる場合があります。
- 障害原因の調査に時間がかかる可能性があります。
対処方法
- イメージから継承する設定を確認し、サービスに合う
healthcheckコマンドを構成してください。 - 間隔、タイムアウト、再試行回数を実際の運用に合わせて調整してください。
- 実際の応答を確認し、結果を監視や障害対応につなげてください。通常の Docker 再起動ポリシーは unhealthy 状態だけではコンテナーを再起動しません。
例
イメージに curl があり、アプリケーションが /health を提供する必要があります。公開ポートの範囲は別途制限してください。
変更前
yaml
services:
app:
image: sample/app:latest
restart: always
ports:
- "8092:8092"
変更後
yaml
services:
app:
image: sample/app:latest
restart: always
ports:
- "8092:8092"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8092/health"]
interval: 30s
timeout: 10s
retries: 3
補足:
- 変更前: Compose には個別のチェックを定義していません。イメージから継承するヘルスチェックがあるか確認してください。
- 変更後: 正常に応答するか定期的に確認します。その結果に基づく再起動やトラフィック制御は別途構成する必要があります。