Docker ComposeでDBを待機してから接続する(healthcheck)

Published on 2025-03-24
Updated on 2025-03-24

最近久しぶりにRDBMSを使うことになり、Docker Composeで各サービスの環境を整えました。

その際 condition: service_healthy という機能を知り、調べたところ、これは便利だと感じたので共有します。

参照

以下のページに該当機能に関する記述がありました。

depends_on

depends_on の依存先に condition: service_healthy を設定すると、対象サービスの healthcheck が成功してから起動させられます。

また、condition には他の条件も指定できます。

service_completed_successfully は何らかの初期化に使えそうですね。

healthcheck

こちらは Dockerfile に存在する HEALTHCHECK がベースとなっているので、まずはそのドキュメントを参照します。

HEALTHCHECK とは、文字通りコンテナの死活監視を行うものです。

CMD 以降に記述するコマンドの終了コードにより、ステータスが success または unhealthy になります。

また、interval, timeout, start-period, start-interval, retries により、ヘルスチェックの実行方法を制御できます。

実際の compose.yml

これらを用いて記述した compose.yml が以下の内容です。

services:
  postgres:
    image: postgres:15
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DB=postgres
    healthcheck:
      test: ["CMD", "pg_isready"]
      interval: 10s
      timeout: 5s
      retries: 5

  app:
    build: .
    depends_on:
      postgres:
        condition: service_healthy

実行結果はこちら。

スクリーンショット2025-03-24200529.png.webp

しっかり立ち上がってから起動しているのが確認できます。


恥ずかしながら、今まではアプリケーション側のロジックで待機させていたので、知ることができてよかったですw

今後も、コンテナに関して新たな知識を得た際には記事を執筆しようと思います。

ブログを作り直した

Published on 2025-03-23
Updated on 2025-03-23
ブログ
開発

Cline + DeepSeek R1 + Cody で格安AIコーディング

Published on 2025-01-23
Updated on 2025-01-23
開発
AI
Cline
Cody

Astro 5でVitestが動かなかった話

Published on 2025-01-17
Updated on 2025-01-17
開発
Astro
免責事項 プライバシーポリシー