DESIGN / CODE / INFRA / AI

解説

depends_onだけで準備完了?Composeのhealthcheckを使う

DBより先にアプリが動いて失敗する。起動したことと、接続を受け付けることを分けてみよう。

depends_onだけで準備完了?Composeのhealthcheckを使う

DBより先にアプリが動いて失敗する。起動したことと、接続を受け付けることを分けてみよう。

depends_onだけで準備完了?Composeのhealthcheckを使うの解説図

図:起動後の接続断や再接続は、アプリ側でも別に設計する。

プロセス起動と利用可能は違う

コンテナが起動しても、データベースの初期化が終わっているとは限らないよ。depends_onの短い書き方で起動順を指定するだけでは、アプリに必要な準備完了を確認できない場合があるんだ。

準備を確認する条件を付ける

services:
  app:
    depends_on:
      db:
        condition: service_healthy
  db:
    image: postgres:17
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U journal"]
      interval: 5s
      retries: 20

これは該当部分だけの例。DBのユーザー、認証、保存先などは別途必要だよ。利用するイメージに確認コマンドが入っていることも確かめてね。

healthcheckの意味を決めよう

ポートが開いているだけなのか、DBへ接続できるのか、アプリの処理まで通るのか。どこまでを確認するかで、healthyの意味は変わるよ。実際の準備状況を示す検査にしよう。

稼働後の再接続も必要

起動時の順番を整えても、その後のDB再起動やネットワーク障害は起こりうるよ。アプリ側の再接続やリトライ、監視も合わせて考えよう。healthcheckだけでサービスの可用性が完成するわけではないよ。

参考・出典

みんなのコメント 0

感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。

最初のコメントをどうぞ。