概要
ECRにイメージをプッシュして、AWS Batchのジョブからコマンドを実行するとexec format errorになりました。本記事ではその原因と解決方法を記載します。
エラー内容
AWS Batchのコマンドに、試しに["pwd"]をジョブに入れて実行しました。
しかし、ログを見ると以下のエラーになりました。
exec /bin/pwd: exec format error
このエラーは、コンテナイメージが実行しようとしているバイナリまたはコマンドの実行形式が正しくない場合に発生するよう。コンテナイメージがEC2インスタンスの実行環境と互換性がないっぽい。
原因
docker inspectを実行してDockerイメージの中身を見てみる
"Architecture": "arm64",
"Variant": "v8",
"Os": "linux",
"Architecture"フィールドが"arm64"であることは、コンテナイメージがARM64アーキテクチャ向けにビルドされた、ということ。
AWS Batchがデフォルトで提供するコンピューティング環境(Amazon EC2インスタンス)のアーキテクチャは、amd64(x86_64)らしい。そのため、Dockerのアーキテクチャと異なるのでエラーになっていた、というわけです。amd64アーキテクチャ向けのコンテナイメージを実行することを前提としているのです。
また、自分はMac M1チップを使ってDockerイメージをビルドしていました。M1はArmアーキテクチャのプロセッサを利用しているので、そこで不整合が起きていたのです。
解決方法
コンテナイメージもARM64アーキテクチャ向けにビルドされている必要があります。
以下でビルドしたら、上述のエラーがなくなりました。
docker build -t sample-image . --platform amd64