LoginSignup
8
1

More than 1 year has passed since last update.

ECSタスク起動時のstandard_init_linux.go:228: exec user process caused: exec format errorへの対処法

Last updated at Posted at 2022-07-24

はじめに

コンテナ初心者の自分がM1 Macを使ってDockerイメージ作成からECSデプロイまで行なった際に発生したエラーとその対処法についてまとめます

結論

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

ECSのタスク起動時に上のエラーが出て、かつDockerイメージ作成の際にM1 Macを使っているならdocker buildコマンドにオプションとして--platform amd64を追加してあげると解決します。

docker build ./ --platform amd64

経緯

Next.jsをECS Fargateにデプロイしようと思い以下のような手順を取りました

  • ローカルでDockerfileからイメージビルド
  • ECRのリポジトリにイメージをpush
  • pushしたイメージをもとにECS Fargateでタスク起動

使用したDockerfile

Dockerfile
FROM node:16.14.2-alpine3.15

ENV TZ Asia/Tokyo

WORKDIR /usr/src/app

COPY ./ ./
RUN apk update
RUN npm install
RUN npm run build

EXPOSE 3000

CMD ["npm", "run", "start"]

ECRへのpush

AWSコンソール上で表示される手順に沿って行いました
スクリーンショット 2022-07-24 9.34.23.png

タスク起動

タスクを起動しても即座に停止してしまうためログを確認したところ次のようなエラーが発生していました。
image.png

原因

上記のエラーはDockerイメージをビルドしたM1 Macと実際にコンテナが動作するFargateのCPUアーキテクチャが違うことが原因で発生するもののようです。そのため結論で書いたようにdocker buildの時にplatformを指定することで解決することができました。

結果

無事にNext.jsをFargate上で実行することができました
スクリーンショット 2022-07-24 9.46.11.png

8
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
8
1