docker-compose でMySQLコンテナが待ち受け状態になってからアプリのコンテナを起動する

参考

docker-composeでMySQLの起動を待つ

結論

ファイル docker-compose を以下のようにする。

version: '3'
services:
  web:
    ...(略)...
    depends_on:
      db:
        condition: service_healthy
  db:
    ...(略)...
    healthcheck:
      test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost", "-uuser_name", "-puser_password"]
      timeout: 20s // タイムアウトの時間設定
      retries: 10 // リトライ回数

depends_on に -db を指定するだけで大丈夫かと思っていましたが、これは起動の順番を指定しているだけで、コンテナが待ち受けの状態になるまでは待ってくれないようです。

YouTube