解説
depends_onだけで準備完了?Composeのhealthcheckを使う
DBより先にアプリが動いて失敗する。起動したことと、接続を受け付けることを分けてみよう。

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

図:起動後の接続断や再接続は、アプリ側でも別に設計する。
プロセス起動と利用可能は違う
コンテナが起動しても、データベースの初期化が終わっているとは限らないよ。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
感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。
最初のコメントをどうぞ。