前提環境
- macOS BigSur v11.6
- MacBook Pro(Apple M1)
- docker compose v3.7
概要
- M1 MacBook 環境でdockerの起動を行なったところ
no matching manifest for linux/arm64/v8 in the manifest list entries
が発生した - 原因はdockerのimageがまだARMプロセッサに対応していないことだった
- dockerのデフォルト設定では起動したPC環境を踏襲した仮想環境を構築してしまう。
- つまり、M1 MacBookの環境で作られる仮想環境はARMで動くことになってしまう。
解決策
- dockerのplatform設定にて、linux/amd64を明示的に指定する
- これによりintelx86-64プロセッサの環境で動くこととなる
現象
- 実案件とは全く違うqiita用の記述ですが、docker-compose.ymlにてmysql環境を構築する記述を作成しました。
- 下記定義をM1 MacBookでビルドすると、仮想環境もARMプロセッサとして構築されます。
version: '3.7'
services:
test_mysql:
image: mysql:5.7
container_name: mysql
environment:
MYSQL_DATABASE: test
MYSQL_ROOT_PASSWORD: password
TZ: 'Asia/Tokyo'
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
ports:
- 3306:3306
- こちらのファイルでdocker compose up実行すると下記のようなエラーが発生します。
- これはどうやら、mysql5.7のdockerイメージがARMプロセッサに対応していないためのようです。
no matching manifest for linux/arm64/v8 in the manifest list entries
対応
- 下記のように
platform: 'linux/amd64'
という定義を追加しただけです。 - これによりPCの環境によらず、仮想環境では
intelx86-64
でビルドすることができます。 - この記述でdocker compose upをすると、正常に起動できるはずです。
version: '3.7'
services:
test_mysql:
platform: 'linux/amd64'
image: mysql:5.7
container_name: mysql
environment:
MYSQL_DATABASE: test
MYSQL_ROOT_PASSWORD: password
TZ: 'Asia/Tokyo'
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
ports:
- 3306:3306
余談
- 今回はdokcer-compose.ymlの場合でしたが、Dockerfileを使った仮想環境構築でも同様の事象が発生します。
- その場合は
docker build --platform linux/amd64
というようにオプションをつけてビルドすることで明示的にプロセッサの指定を行うことができます。