LoginSignup
20
16

More than 1 year has passed since last update.

【備忘録】Mac m1 チップ搭載機にてdocker runが失敗する

Last updated at Posted at 2021-05-26

何で困っていたか

開発環境で利用していた Dockerfile を Mac m1 を搭載した筐体にて動かしたところ、以下のエラーメッセージが出て困った。

FROM mysql:8.0.2
failed to solve with frontend dockerfile.v0: failed to create LLB definition: no match for platform in manifest sha256:8b7b328a7ff6de46ef96bcf83af048cb00a1c86282bfca0cb119c84568b4caf6: not found

起動時に何が起こったか

M1チップはARMのプロセッサを利用しており、従来のDockerイメージで利用する各種モジュールの前提であるamd64系のメモリ管理手法では、docker runで起動した際に読み込まれるパッケージの管理がうまく動作しないことがある。
具体的には以下のようなエラーが発生する場合がある。

cc1plus: error: unknown value 'armv8-a-march=armv8-a' for -march
cc1plus: note: valid arguments are: armv8-a armv8.1-a armv8.2-a armv8.3-a

参考サイトにも記載があるが、上記エラーはdocker pull時にARM64プラットフォーム向けのイメージを優先して取得することにより発生する。

docker pull 時に、指定したDockerイメージに、ARM64プラットフォーム向けにビルドされたものがあればそれを、なければx86_64プラットフォームのものが選択されてpullされます。

対応方法

明示的に利用するプロセッサを指定することで、MacのRosetta2でエミュレートして起動する。

コマンドラインからの起動方法

docker runを行う際に、--platform=linux/amd64のオプションを付与して起動を行う。

  • 例:MySQLのコンテナを立てる
    • docker run --platform=linux/amd64 mysql:8.0.20
    • 以下でも動作します
      • docker run --platform=linux/x86_64 mysql:8.0.20

Dockerfileからの起動方法

FROM句で起動イメージを指定する際にオプションを付与する。

  • 例:MySQLのコンテナを立てる
    • FROM --platform=linux/amd64 mysql:8.0.20

参考サイト

20
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
16