M1Mac環境でDockerのMySQLを動かす


 概要

M1Mac環境でMySQLを起動しようと思ったら下記のようなエラーが出た。


$ docker run -d --rm -e MYSQL_ROOT_PASSWORD=password mysql:8.0   
Unable to find image 'mysql:8.0' locally
8.0: Pulling from library/mysql
docker: no matching manifest for linux/arm64/v8 in the manifest list entries.

この記事はM1MacでDockerを使ってMySQLのコンテナを立ち上げるためのものです。

事前準備

Docker Desktop(Preview)をインストール済

理由

M1Macのプラットフォームはarm64。
mysqlイメージのサポートプラットフォームはamd64。
イメージをプルする際に実行環境のプラットフォームに合わせて自動的にamd64のイメージを取得し、エラーになっている。

解決策

--platformオプションを付与して、明示的にamd64のイメージを取得する。

--platformオプションによって、どのプラットフォーム (OSおよびCPUアーキテクチャの組み合わせ) に対応したイメージを生成するのかを指定します。
ここでは「Linux/AMD64」と「Linux/ARM64」という2通りのプラットフォームを指定しています。
ちなみに、--platformオプションを省略した場合は、ビルドを実行する環境のOS/CPUアーキテクチャが自動的に指定されます。

引用元: Dockerの「マルチCPUアーキテクチャ」に対応したイメージをビルドする

docker コマンドの場合

--platformオプションを追加する


$ docker run -d --rm --platform linux/x86_64 -e MYSQL_ROOT_PASSWORD=password mysql:8.0

Dockerfileの場合

--platformmオプションを追加する

Dockerfile
FROM --platform=linux/x86_64 mysql:8.0
(省略)

docker-compose.ymlの場合

platformセクションを追加する

docker-compose.yml
version: "3"
services:
  db:
    image: mysql:8.0
    platform: linux/x86_64
(省略)

備考

いけるちゃーいけてる状態である。

参考