こんにちは。いっちー(@tetestkake_blog)です!
話題のM1 Macを買ってみたはいいものの、MySQLコンテナが立ち上がらない問題に遭遇しました。
しばらく調べたうちに解決することができたので、この記事ではMySQLコンテナが立ち上がらない問題の解消法を紹介します。
MySQLコンテナを起動するとエラーが発生
M1 Macを購入した際、MySQLコンテナを立ち上げると以下のエラーに遭遇しました。
$ docker run -d -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.
See 'docker run --help'.
「no matching manifest for linux/arm64/v8 in the manifest list entries」 !??
何が起きたんだ…!?
Docker公式リファレンスを確認
Docker公式リファレンスを確認します。
公式によると、CPUアーキテクチャの違いからMySQLのイメージM1 Macでは現状利用できないと書いてあります。
ARM64アーキテクチャー向けのイメージがすべて利用可能となっているわけではありません。 Intelイメージの実行には、エミュレーションのもとで
https://matsuand.github.io/docs.docker.jp.onthefly/docker-for-mac/apple-silicon/--platform linux/amd64
をつけて実行することが必要です。 特にmysqlイメージは ARM64 向けには利用できません。 これに対する当面の対処としてはmariadbイメージを利用してください。
公式にはmariadbイメージを利用してくださいとあります。
なんとかMySQLを使い続けることはできないものか。。。
解消法
公式リファレンスをよく読んだら、「エミュレーションのもとで--platform linux/amd64
をつけて実行することが必要です」と記述があったので、
この方法で挑戦してみると見事コンテナが立ち上がりました!
Dockerコマンド
オプションにてplatformを指定します。
docker run -d --platform linux/x86_64 -e MYSQL_ROOT_PASSWORD=password mysql:8.0
Dockerfile
FROMにてplatformを指定します。
FROM --platform=linux/x86_64 mysql:8.0
# 以下省略
Docker Compose
platform: linux/x86_64を追加します。
version: '3'
services:
sample-db:
image: mysql:8.0
# for m1 mac
platform: linux/x86_64
# 以下省略
上記の記述を追記するとコンテナが起動できる様になります!
最後に
platformをlinux/x86_64と指定することで、M1 MacにてMySQLコンテナを使用することが可能になります。
公式がmariadbを使用してくださいとアナウンスしているのでベストではないかもしれませんが、
MySQLコンテナはM1 Macでも使用することができそうです。
参考リファレンス
- Docker Desktop for Apple silicon
- M1Mac環境でDockerのMySQLを動かす
- Docker ドキュメント日本語化プロジェクト
コメント