M1 Mac で MySQL5.7.28 が platform: linux/x86_64 では起動しなかったので別のイメージを使った

4 min read読了の目安(約3700字

2021/5/7追記:root ユーザーを使うときは ryo_kawamata さんの記事の方法が使えるようだ

TL;DR

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:

これでイケてます。
その他の詳しい設定などは過去記事参照

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版もあります」とあったので参考にしました

ので、mysql-server の 5.7.28 イメージを使ってみます。

動きました。この場合は 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:

以上です。誰かの助けになれば幸いです。
今回のリポジトリはこちらです。その他の設定ファイルなどもリポジトリをみてもらえればわかると思います。

https://github.com/JUNKI555/rails_mysql57_m1_docker

2021/5/7追記:root ユーザーを使うときは ryo_kawamata さんの記事の方法が使えるようだ

私はこれでいけた

docker-compose.yml
environment:
  - MYSQL_ROOT_HOST=%
  - MYSQL_ROOT_PASSWORD=hogehoge