はじめに
dockerのbuildが完了しRailsのデータベース作成しようと、
docker compose run main rails db:create
を実行した際に以下のエラーが発生。
Unknown MySQL server host 'mysql' (-2) Couldn't create 'myapp_development' database.
Please check your configuration. rails aborted!
docker-compose.ymlは次の通り。
docker-compose.yml
services:
mysql:
container_name: myapp_mysql
image: mysql:5.7
platform: linux/x86_64
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_ROOT_PASSWORD: password
- TZ=Asia/Tokyo
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
環境
- Docker 26.1.1
- Rails 6.0
- Ruby 3.0.3
- MySQL 8.0
- M1 mac
結論
MY SQL5.7のイメージはplatform: linux/x86_64では起動しないので、arm版のある mysql-serverイメージを使う必要がありました。
【参考】
https://zenn.dev/junki555/articles/4fcda598d3b65f
docker-compose.yml
services:
mysql:
container_name: myapp_mysql
image: mysql/mysql-server:5.7
platform: linux/x86_64
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_ROOT_PASSWORD: password
- TZ=Asia/Tokyo
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
最新の8.0系をつかう場合では以下でも起動できました。
docker-compose.yml
services:
mysql:
container_name: myapp_mysql
image: mysql/mysql-server:latest
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_ROOT_PASSWORD: password
- TZ=Asia/Tokyo
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
まとめ
M1 Macで環境構築をする際に、docker-compose.ymlのdbにplatformを指定しなければいけないことはわかっていたので、
platform: linux/x86_64
は元々指定していましたが、それで設定は全て解決と思い込んでしまっており、全然関係ないdatebase.ymlの設定を調査していました。
上手くいっていない時は必ず原因があるので、現状の環境自体を疑うことからはじめたいです。