TL;DR
docker
docker build -t name --platform linux/amd64 .
docker compose
services
の該当コンテナ定義に以下を追記。
services:
db:
# 略
platform: linux/amd64
背景
FROM mysql:5.7
M1 Mac上でこれだけ書いた Dockerfile
を docker build -t my_mysql .
でビルドしようとすると以下のエラーが出ます。
failed to solve with frontend dockerfile.v0: failed to create LLB definition: no match for platform in manifest sha256:853105ad984a9fe87dd109be6756e1fbdba8b003b303d88ac0dda6b455f36556: not found
docker pull --platform linux/amd64 mysql:5.7 && docker run -it --rm mysql:5.7
は正常に動作するのでなぜ?と思っていたのですがビルド時にも platform
を指定する必要があったようです。考えてみれば当たり前ですし後から振り返ると対策もtrivialなんですがマルチCPUアーキテクチャを意識せずにボケっとDockerを使っていたので無駄にハマりました。ググってもヒットしなかったので同じトラップにハマってる人の助けになればと思い備忘録的に記録することにしました。