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'