Open2

M1 MacのDockerでMySQLのビルドに失敗したから、ちょっと調べる

awonosukeawonosuke

こんな感じのdocker-compose.ymlを用意して、ビルドしたらコケたので調べてみた。

version: "3.9"

services:
  web-app:
    container_name: lamp-web-app
    build:
      context: .
      dockerfile: ./docker/web-app/Dockerfile
    ports:
      - ${WEB_APP_PORT}:80
    volumes:
      - ./lamp-base:/docker-lamp
    depends_on:
      - db
  db:
    container_name: lamp-db
    image: mysql:5.7
    platform: linux/amd64
    ports:
      - ${DB_PORT}:3306
    volumes:
      - db-store:/var/lib/mysql
      - ./docker/db/init-sql:/docker-entrypoint-initdb.d
      - ./docker/db/my.cnf:/etc/mysql/conf.d
    environment:
      MYSQL_ROOT_PASSWORD:
      MYSQL_DATABASE:
      MYSQL_USER:
      MYSQL_PASSWORD:
    tty: true
    restart: always
volumes:
  db-store:

で実際コンソールでこんな感じでエラーを吐いて、ビルドが失敗した。dbコンテナを立てるときに失敗しているのでMySQL周りの設定が怪しいなと。
エラー文を意訳すると、linux/arm64/v8に対応してるコンテナはないよ的な

$ docker compose up --build -d
[+] Running 0/1
 ⠸ db Pulling                                                                                                                                                                                       3.4s
no matching manifest for linux/arm64/v8 in the manifest list entries
awonosukeawonosuke

調べるといくつか記事が出てきて、M1 MacのCPUアーキテクチャ(ARM64)による違いでどうやらエラーが起こっている。platformをlinux/amd64に指定することで解決する。詳細は各記事を参考にされたい。

platformを指定して、linux/amd64にエミュレートする指定をすることで正常に動くようになります

https://zenn.dev/marumarumeruru/articles/55173a98863d4e

https://qiita.com/toyoyuto618/items/f225e1b2ab22ca5adf33

個人的には丁寧だったのでこの記事は分かりやすかった。
https://gihyo.jp/dev/serial/01/mysql-road-construction-news/0167