💁♀️
M1 Mac で MySQL5.7.28 が platform: linux/x86_64 では起動しなかったので別のイメージを使った
2021/5/7追記:root ユーザーを使うときは ryo_kawamata さんの記事の方法が使えるようだ
TL;DR
- しのゆさんの記事どおりでいけた
- M1 DockerでMySQLを含んだ環境を動かすためにやったこと | shinoyu | zenn
- root ユーザーを使うときは ryo_kawamata さんの記事の方法が使えるようだ
- Host xxx is not allowed to connect to this MySQL server の対応 | ryo_kawamata | zenn
M1 Mac で MySQL5.7.28 が platform: linux/x86_64 では起動しなかった
普段は MySQL8.0 で開発してるんですが、
MySQL8.0 は docker-compose.yml で platform: linux/x86_64
をつければ動きます
例えば Rails+MySQL8.0 の構成だと
docker-compose.yml
version: '3.8'
services:
app:
container_name: app
build: .
tty: true
stdin_open: true
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/app
- bundle_install:/usr/local/bundle
ports:
- "3000:3000"
depends_on:
- db
db:
platform: linux/x86_64
image: mysql:8.0
container_name: db
restart: always
volumes:
- ./forDocker/mysql/conf.d:/etc/mysql/conf.d
- dbvol:/var/lib/mysql
ports:
- "3306:3306"
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: 1
TZ: "Asia/Tokyo"
adminer:
image: adminer:latest
container_name: adminer
ports:
- "9000:8080"
depends_on:
- db
volumes:
bundle_install:
dbvol:
これでイケてます。
その他の詳しい設定などは過去記事参照
- Rails Active Job をとりえず使ってみる (with docker-compose) | 北山淳也 | zenn
MySQL5.7.28 のイメージは platform: linux/x86_64 では起動しなかった
MySQL5.7.28 を使う必要があったので、同様に platform: linux/x86_64
で MySQL5.7.28 を指定してみたのですが起動しませんでした。
エラーはこんな感じです
[ERROR] InnoDB: Linux Native AIO interface is not supported on this platform. Please check your OS documentation and install appropriate binary of InnoDB.
[ERROR] 1030 Got error 175 from storage engine
[ERROR] Aborting
arm版のある mysql-serverイメージを使って解決
しのゆさんの記事で、「mysql公式が用意している、mysql-serverイメージを使います。こちらはarm版もあります」とあったので参考にしました
- M1 DockerでMySQLを含んだ環境を動かすためにやったこと | shinoyu | zenn
ので、mysql-server の 5.7.28 イメージを使ってみます。
- mysql/mysql-server | 5.7 | Docker Hub
- mysql/mysql-server:5.7.28 | Docker Hub
動きました。この場合は arm版のイメージを使うので platform: linux/x86_64
は不要ですね。
docker-compose.yml はこんな感じです。
(特に mysql.conf.d などはいじらずイケました)
docker-compose.yml
version: '3.8'
services:
app:
container_name: app
build: .
tty: true
stdin_open: true
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/app
- bundle_install:/usr/local/bundle
ports:
- "3000:3000"
depends_on:
- db
db:
image: mysql/mysql-server:5.7.28
container_name: db
restart: always
volumes:
- ./forDocker/mysql/conf.d:/etc/mysql/conf.d
- dbvol:/var/lib/mysql
ports:
- "3306:3306"
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: 1
TZ: "Asia/Tokyo"
volumes:
bundle_install:
dbvol:
以上です。誰かの助けになれば幸いです。
今回のリポジトリはこちらです。その他の設定ファイルなどもリポジトリをみてもらえればわかると思います。
2021/5/7追記:root ユーザーを使うときは ryo_kawamata さんの記事の方法が使えるようだ
- Host xxx is not allowed to connect to this MySQL server の対応 | ryo_kawamata | zenn
私はこれでいけた
docker-compose.yml
environment:
- MYSQL_ROOT_HOST=%
- MYSQL_ROOT_PASSWORD=hogehoge
Discussion
こちらarmではなくamd版のイメージのようにみえます。
arm版のイメージを使っているからではなく、mysql-serverのイメージを使っているからビルドできているのではないかと思いました。
platform指定なしでも動くのは、対象のイメージのplatformが1種類(amd)のみだからで、arm版のイメージを使っているからとは少し違うような気がします🧐
あれほんとですね…… 💦 ご指摘ありがとうございます