CI 中など、コンテナが起動し MySQL のサーバーが起動されたか確認したい場合があります。
その目的のため mysqladmin
コマンドを使っていたのですが、思ったように起動完了しておらず、次のステップで落ちてしまったことがあったのでその共有です。
原因 & 解決策
mysql のコンテナは起動時に "temporary server" を立ち上げて、その後自分で設定した mysql のサーバーのが起動するっぽいです。
後者のサーバーにのみ network interface が割り当てられるので、protocol を tcp に指定すると確定で後者の起動が確認できます。
# protocol を指定しないと "temporary server" 側にアクセスされてしまう。 mysqladmin ping -hlocalhost --silent --protocol tcp
コンテナの起動方法
compose.yml
services: db: image: "mysql:8.0" restart: always environment: MYSQL_ALLOW_EMPTY_PASSWORD: "true" MYSQL_USER: mysql_user MYSQL_PASSWORD: mysql_password MYSQL_DATABASE: app ports: - "43306:3306"
コンテナの起動確認
docker compose up -d db # --protocol tcp をつける。 docker compose exec db bash -c 'while ! mysqladmin ping -hlocalhost --silent --protocol tcp; do sleep 1; done'