「no match for platform in manifest」エラー
AppleのM1およびM2チップは、ARMアーキテクチャに基づいており、コンピューティング界において画期的な存在となっています。しかしながら、この新しいアーキテクチャは、特にもともとx86-64プラットフォーム向けに設計されたソフトウェアを使用する際に互換性の問題を引き起こすことがあります。そのような問題の1つは、M1/M2 Mac上でDockerイメージをビルドしようとする際に発生します。
次のDockerfileをコマンドdocker build .
とともに実行すると、
FROM <your image>:latest
おそらく次のエラーメッセージに遭遇するかもしれません。
failed to solve with frontend dockerfile.v0: failed to create LLB definition: no match for platform in manifest sha256:8531053692ea6f2876d103be6756e2fbdba8b2332303d88ac03da26455332566: not found
このエラーは、基本的にはDockerが指定されたマニフェストSHA-256ハッシュに対して互換性のあるプラットフォームを見つけることができないと言っています。これは、作業しているプラットフォームとDockerイメージが構築されるプラットフォームとの間で一致しないために発生します。
解決方法
Dockerは、イメージのターゲットプラットフォームを指定するための--platform
フラグを提供しています。このフラグを使用することで、Dockerに指定したアーキテクチャと互換性のあるイメージを取得またはビルドするように指示できます。例えば、M1/M2 Macでこの問題に遭遇し、linux/amd64
プラットフォーム向けにビルドする必要がある場合、次のコマンドを使用できます。
$ docker build --platform linux/amd64 .
このコマンドにより、Dockerはlinux/amd64
プラットフォームと互換性のあるイメージマニフェストを検索し、「no match for platform in manifest」エラーを解決します。
もしDocker Composeを使用してマルチコンテナアプリケーションを管理している場合、docker-compose.yml
ファイルでプラットフォームを指定することができます。以下にその方法を示します。
services:
hoge:
platform: linux/amd64
この設定により、Docker Composeに対してhoge
サービスをlinux/amd64
プラットフォーム向けに実行するように指示します。