AWSを使い始めてCodeBuild & ECS を試していた際、表題のエラーに遭遇し、思いのほか時間を浪費してしまったのでメモっておきます。
事象
ECSでコンテナをデプロイすると、AWSコンソール ECS画面の左ペイン [ クラスター ] → 当該クラスタのクリック → [ タスク ] タブの画面でステータスが RUNNING になったと思ったらすぐ STOPPED になる。そして、また別のタスクが RUNNING → STOPPED ・・・ 以降、無限ループの状態となりました。
当該タスクをクリック → [ Logs ]タブを確認すると以下のようなエラーが出力されていました。
standard_init_linux.go:211: exec user process caused "exec format error"
原因
Dockerfileで使用していたイメージとCodeBuildで指定したビルド環境のCPUアーキテクチャが異なっていたためでした。
【Dockerfile】
今回使用したDockerファイルは以下のような内容で、httpd:2.4 はアーキテクチャが指定されてないとamd64(x86-64) でビルドされます。
FROM httpd:2.4
COPY ./index.html /usr/local/apache2/htdocs/
CMD ["httpd-foreground"]
【CodeBuild環境】
誤ってaarch64(arm64) を指定しており、Dockerfileのhttpdイメージと異なるアーキテクチャであったためエラーとなっていました。
対応
今回の例ではCodeBuildで amazonlinux2-x86_64 のイメージを選択すれば正常にデプロイが完了します。
なお、このエラーはentrypoint.sh に shebang(例: #!/bin/sh ) がないときも出るようです。
Tips
Codebuildではもう一つ
Step 3/3 : CMD ["httpd-foreground"]
---> Running in 0672c1e1531e
Removing intermediate container 0672c1e1531e
---> f8cd04edae75
Successfully built f8cd04edae75
Successfully tagged test-2:latest
Running command docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
"docker tag" requires exactly 2 arguments.
See 'docker tag --help'.
Usage: docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
Command did not exit successfully docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG exit status 1
Phase complete: BUILD State: FAILED
のように “docker tag” requires exactly 2 arguments. というエラーにも遭遇しました。
公式サイトのサンプル 通りbuildspec.ymlの設定を環境変数から読み込むようにしていたのですが、(自分の場合は)AWS_ACCOUNT_ID の最後に半角スペースが入っていたためでした。。orz
先人の方々のおかげてすぐ抜け出せましたが(感謝)、自力解決だったらおそらく結構時間を浪費したとおもいます。
目視確認できないスペースが混じってる系の問題だったので。。
結局どれもこれも、慌てず正確に入力・選択しましょう!の一言に尽きますね。
参考
(*ゝω・)ノ ァリガトネー
Raspberry Pi上のDockerで動くイメージのCIでのビルド方法 – Qiita
AWS CodeBuildで失敗したときに確認するポイント – Qiita
Docker – Dockerでエラーが出る:standard_init_linux.go:207: exec user process caused “exec format error”|teratail