【AWS】standard_init_linux.go:228: exec user process caused: exec format error 解決方法

MacでローカルでDockerイメージをビルドしてAWSのECRにpush。ECR上のイメージでECSのFargateを作って起動させた時に以下エラーが発生してコンテナが起動してはすぐに落ちるのループ状態に。

standard_init_linux.go:228: exec user process caused: exec format error

同じイメージでローカルでコンテナを起動したらうまく行くのになんでやねん!と思ってハマってたところ、以下のような記事を見つけた。

hikari-blog.com

はい、ここにある通り、M1チップ搭載のMacでDockerイメージをビルドしたのが原因でした。ビルドするマシンと実行するマシンのCPUアーキテクチャが異なると起動に失敗する、とのことです。Cloud9とかEC2, CodeBuildなど、AWSのサービス上でビルドすれば問題なかったようですが、まさかM1チップが原因だとは思いつきませんでした。

イメージビルド時にplatformを指定やれば、Macローカルビルドしたイメージでも問題なくコンテナ起動しました。

docker build --platform amd64 ./