MySQLのDockerイメージは大きく分けて2つあります。
今回は後者のmysql-server
のイメージを使用する際の注意点です。
もし実際にRailsと組み合わせて環境構築を行う際は、以下の記事を参考にしてください。
本題:MYSQL_ROOT_HOST
を設定する
compose.yaml
services:
db:
image: mysql/mysql-server:latest
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_ROOT_HOST: '%' # この行が必要
...
ここのMYSQL_ROOT_HOST: '%'
の指定が必要です。
何をやってるか?
もしDocker公式のMySQLのイメージを使用する場合は、このMYSQL_ROOT_HOST
の指定は必要ありません。docker-entrypoint.sh
のこの行で、デフォルトのホスト名がワイルドカード(%
)に指定してあるからです。
https://github.com/docker-library/mysql/blob/master/8.0/docker-entrypoint.sh#L251
一方で、今回使用したMySQL公式が用意しているイメージ(mysql-server
)では、デフォルトのホスト名はlocalhost
に指定してあります。
https://github.com/mysql/mysql-docker/blob/mysql-server/8.0/docker-entrypoint.sh#L110
この場合、MySQLサーバーのコンテナ内からしかアクセスができないので、ホスト名にワイルドカードを指定する必要がある、ということです。
参考サイト
MySQLのDockerイメージ全般
今回の対処法関連