LoginSignup
2

More than 1 year has passed since last update.

【Docker✖️M1】no matching manifest for linux/arm64/v8 in the manifest list entriesを解決(arm/amd/rosetta)

Posted at

概要

  • M1チップとDockerの相性について方々で記事が書かれていますが、いざ自分で作業しながら調べていると理解が深まったので、残しておきます。(M1、Arm64、Rosettaあたり)

環境

  • Mac
    • 機種ID:MacBookPro18,3
    • macOS:Monterey
    • チップ:Apple M1 Pro
    • メモリ:16GB
  • Docker: version 20.10.21
  • Docker Compose: v2.12.1

エラー内容

  • docker compose up -dコマンド実行時に以下エラーが表示された。
  • 利用しようとしたコンテナイメージは、mysql:5.7。
no matching manifest for linux/arm64/v8 in the manifest list entries

原因の追求

  • 原因は、M1のCPUがmysqlイメージに対応していないことでした。

  • 2020年後期より、それまでインテルのチップ(Intel Core i5とかのあれですね)を利用していたMacがARMアーキテクチャーを採用した独自のプロセッサー(「Appleシリコン」と呼ばれています)を搭載するようになりました。

  • ARMはiPhoneなどに採用されており、CPUパフォーマンスが圧倒的に処理速度が速いと言われています。

  • ただし、ARM64で動かないイメージもあります。その場合は--platform linux/amd64オプションによってIntelイメージをエミュレーション上で動かすことができる、と公式にも記載があります。mysqlイメージについては、多くの方が同様に対応しているようです。

  • メーカー、CPU、命令セットあたりの関係性、M1チップやRossettaについては、こちらのサイトがとてもわかりやすかったです。x86とかx86_64とかわかりづらい(笑)ですが、簡潔にまとまっています。

  • 同じサイトですが、こちらの表が一番わかりやすい。(厳密にいうと色々あるとのことですが、これで十分だと思います!)
    image.png
     画像参照元:Apple Silicon と M1 チップってなに?

解決方法

  • docker-compose.ymlのservices>mysql(db)以下のようにplatformを指定することで、解決しました。
platform: linux/amd64

備忘録

  • CPU周りのハードウェアのタイプを表示するunameコマンドは以下の通り。
    • uname -m
    • 自分の場合は、arm64と返ってきます
  • Docker Hubに行けばイメージのアーキテクチャ一覧を確認することができます。
    • 対象イメージを選択→Tagsタブクリック→OS/ARCHの項目から確認可能
    • 2023.1.5時点では、mysql:5.7は以下が表示されています。(バージョンによって異なる)
      • linux/amd64
  • Rosettaについて(Intel用のバイナリ・ARM64用のバイナリの変換技術)
    • Rosetta:PowerPCからIntelアーキテクチャに移行したときに使われたもの(2004年)
    • Rosetta 2:IntelアーキテクチャからApple Siliconに移行したときに使われたもの(2020年)

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
2