はじめに
コンテナ初心者の自分が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
タスク起動
タスクを起動しても即座に停止してしまうためログを確認したところ次のようなエラーが発生していました。
原因
上記のエラーはDockerイメージをビルドしたM1 Macと実際にコンテナが動作するFargateのCPUアーキテクチャが違うことが原因で発生するもののようです。そのため結論で書いたようにdocker build
の時にplatform
を指定することで解決することができました。