概要
docker-compose.yml において、PostgreSQL・RabbitMQ のヘルスチェック定義と、各サービスの depends_on における condition: service_healthy が設定されていません。これにより、docker compose up 実行時にインフラコンテナ(DB、メッセージブローカー)が準備完了する前にアプリケーションサービスが起動し、接続エラーが発生する可能性があります。
現状
- 各サービスの
Program.cs では /healthz エンドポイントが実装済み
- しかし
docker-compose.yml の depends_on は単純なサービス名指定のみで、ヘルスチェック条件がない
postgres と rabbitmq サービスにも healthcheck ブロックが定義されていない
再現手順
docker compose up --build を実行
- PostgreSQL の初期化が完了する前にサービスが起動し、DB接続エラーが発生する場合がある
期待される修正
1. インフラサービスにヘルスチェックを追加
postgres:
image: postgres:16-alpine
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
timeout: 5s
retries: 5
rabbitmq:
image: rabbitmq:3-management-alpine
healthcheck:
test: ["CMD", "rabbitmq-diagnostics", "-q", "ping"]
interval: 10s
timeout: 5s
retries: 5
2. 各アプリケーションサービスの depends_on に条件を追加
depends_on:
postgres:
condition: service_healthy
rabbitmq:
condition: service_healthy
3. (任意) 各アプリケーションサービスにもヘルスチェックを追加
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:<port>/healthz"]
interval: 10s
timeout: 5s
retries: 3
対象ファイル
補足
docker-compose.yml の version: '3.8' キーも Docker Compose V2 では非推奨のため、合わせて削除を検討してください。
概要
docker-compose.ymlにおいて、PostgreSQL・RabbitMQ のヘルスチェック定義と、各サービスのdepends_onにおけるcondition: service_healthyが設定されていません。これにより、docker compose up実行時にインフラコンテナ(DB、メッセージブローカー)が準備完了する前にアプリケーションサービスが起動し、接続エラーが発生する可能性があります。現状
Program.csでは/healthzエンドポイントが実装済みdocker-compose.ymlのdepends_onは単純なサービス名指定のみで、ヘルスチェック条件がないpostgresとrabbitmqサービスにもhealthcheckブロックが定義されていない再現手順
docker compose up --buildを実行期待される修正
1. インフラサービスにヘルスチェックを追加
2. 各アプリケーションサービスの
depends_onに条件を追加3. (任意) 各アプリケーションサービスにもヘルスチェックを追加
対象ファイル
src/docker-compose.yml補足
docker-compose.ymlのversion: '3.8'キーも Docker Compose V2 では非推奨のため、合わせて削除を検討してください。