LoginSignup
6
1

More than 1 year has passed since last update.

【AWS】M1 MacOSでDockerイメージを作成し、ECS Fargateでタスク実行すると「standard_init_linux.go:228: exec user process caused: exec format error」のエラーメッセージが出た

Last updated at Posted at 2022-09-14

解決策

Dockerイメージをビルドする際に、--platformオプションでどのプラットフォーム (OSおよびCPUアーキテクチャの組み合わせ) に対応したイメージを作成するかを指定する。

docker build --platform=linux/amd64 -t [タグ名] .

ビルド後にECRへDockerイメージをプッシュし、ECSのタスクを実行すると無事に処理が完了した。

このオプションにより、「マルチCPUアーキテクチャ」に対応したイメージのビルドができる。
他には、--platform amd64の指定でも解決するようである。

エラーの原因

Dockerイメージを作成したM1 MacOSと、ECSでコンテナが動くFargateのCPUアーキテクチャが違うためにエラーとなった。
つまり、今回のエラーは、イメージをビルドしたマシンと、コンテナを実行するマシンのCPUアーキテクチャが異なるために発生する。

ECRのリポジトリにAWSマネジメントコンソールからアクセスすると「プッシュコマンドの表示」というボタンがあり、ECRリポジトリへのDockerイメージのプッシュ手順を見ることができる。
Linux/MacOSとWindowsとで手順とコマンドを分けて表示してくれているので、コピペして使うことができる。
しかし、その手順をそのまま行うだけではタスク実行時にエラーが出た。
M1 MacOS上で、platformオプションを指定せずにDockerイメージをビルドしたためである。
DockerイメージのECRへのプッシュ時には警告やエラーは出ないので気付きにくい。

参考資料

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1