Open2

M1 Mac環境でECS Fargateで動くx86_64イメージを作成するまでの作業まとめ

M1 Mac環境で何も考えずにdocker buildをすると、armのイメージが作成される。
それをECS環境にデプロイすると下記のようなエラーをはいてタスクが強制終了される。

[FATAL tini (8)] exec /bin/sh failed: Exec format error

これを回避するためには、ECSで設定しているcpuArchitecture に沿ったplatfotmでビルドしたイメージを使わないといけない。今現在ECSのarchitectureは未定義になっている(つまりx86_64)

現状platform指定でビルドするには、docker buildxを使ってマルチプラットフォームビルドを行う必要あり。
Docker Desctop for Macの最新版ならすでに入ってる。Linuxに関してもEngineと一緒に入るので特に準備が必要なわけではなさそう。

https://matsuand.github.io/docs.docker.jp.onthefly/buildx/working-with-buildx/

使う前にImage Builderを作成する必要があるようだ。下記コマンドでImage Builderの設定が可能。

docker buildx create --name {name} --platform linux/arm64 --use

platfromはカンマ区切りで複数渡すことができる。設定可能な値については、おそらくこれ

https://github.com/docker/buildx/blob/master/docker-bake.hcl
作成者以外のコメントは許可されていません