💁‍♀️

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

2021/05/01に公開
2

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

Discussion

mm

mysql/mysql-server:5.7.28 | Docker Hub
あった
https://hub.docker.com/layers/mysql/mysql-server/5.7.28/images/sha256-5396bc60a6c08abb6b7e8350b255324a91ee9f3ea11f009aea3e4b61ead38bf6?context=explore

こちらarmではなくamd版のイメージのようにみえます。
arm版のイメージを使っているからではなく、mysql-serverのイメージを使っているからビルドできているのではないかと思いました。

この場合は arm版のイメージを使うので platform: linux/x86_64 は不要ですね。

platform指定なしでも動くのは、対象のイメージのplatformが1種類(amd)のみだからで、arm版のイメージを使っているからとは少し違うような気がします🧐

北山淳也北山淳也

こちらarmではなくamd版のイメージのようにみえます。

あれほんとですね…… 💦 ご指摘ありがとうございます