Traffine I/O

日本語

2022-12-18

no match for platform in manifest

「no match for platform in manifest」エラー

AppleのM1およびM2チップは、ARMアーキテクチャに基づいており、コンピューティング界において画期的な存在となっています。しかしながら、この新しいアーキテクチャは、特にもともとx86-64プラットフォーム向けに設計されたソフトウェアを使用する際に互換性の問題を引き起こすことがあります。そのような問題の1つは、M1/M2 Mac上でDockerイメージをビルドしようとする際に発生します。

次のDockerfileをコマンドdocker build .とともに実行すると、

Dockerfile
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プラットフォーム向けにビルドする必要がある場合、次のコマンドを使用できます。

bash
$ docker build --platform linux/amd64 .

このコマンドにより、Dockerはlinux/amd64プラットフォームと互換性のあるイメージマニフェストを検索し、「no match for platform in manifest」エラーを解決します。

もしDocker Composeを使用してマルチコンテナアプリケーションを管理している場合、docker-compose.ymlファイルでプラットフォームを指定することができます。以下にその方法を示します。

docker-compose.yml
services:
  hoge:
    platform: linux/amd64

この設定により、Docker Composeに対してhogeサービスをlinux/amd64プラットフォーム向けに実行するように指示します。

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!