跳至內容

我該如何對導致 Amazon ECS 任務失敗的「exec format」錯誤進行疑難排解?

1 分的閱讀內容
0

我想解決導致 Amazon Elastic Container Service (Amazon ECS) 任務失敗的「exec format」錯誤。

簡短描述

當執行的任務所使用的容器映像檔是為與您的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體不同的架構所建置時,就會發生此錯誤。例如,如果您在 ARM 型執行個體上建置了容器映像檔,然後嘗試在 x86 執行個體上執行該任務。

**注意:**該任務的停止原因為 "Essential container in task exited",且結束代碼為 1。

解決方法

若要解決此問題,請變更您的 Amazon ECS 任務的架構,或為正確的架構重新建置映像檔。

變更 ECS 任務的架構

任務的架構由任務定義中的 cpuArchitecture 參數決定。有效值為 x86_64 和 ARM64,其中 x86_64 為預設值。

若要變更用於啟動任務的架構,請建立任務定義的新修訂版,並將 cpuArchitecture 參數設為所需的值。如果任務是服務的一部分,請使用修改後的架構更新服務並執行部署,以啟動新任務。

對於 Fargate 啟動類型,AWS 會自動佈建具正確架構的基礎結構以執行任務。如果您使用 EC2 執行個體或外部執行個體作為啟動類型,則必須管理您的組態容量。如需更多資訊,請參閱容量管理

為正確架構重新建置映像檔

使用任務定義中指定的相同架構重新建置容器映像檔。

**注意:**大多數容器映像檔建置工具預設使用主機的架構。

使用 Docker 或 Finch

在建置命令中加入 --platform 參數 以設定目標架構。例如,Docker 建置命令 --platform linux/arm64 [...] 會建置 ARM64 的映像檔。Finch 建置命令 --plaform linux/amd64 [...] 會建置 x86/64 架構的映像檔。

建置命令範例:

docker build -t my-image --platform linux/arm64

如需了解更多有關命令列用戶端 Finch 的資訊,請參閱Finch 簡介: 用於容器開發的開放原始碼用戶端

有關如何建置 Docker 映像檔的更多資訊,請參閱 Docker 官方網站上的 建置多平台映像檔

AWS CDK

使用 AWS Cloud Development Kit (AWS CDK) 的 ecs.ContainerImage.fromAsset 映像檔,從來源目錄中的 Docker 檔案建置並上傳映像檔。如需更多資訊,請參閱映像檔

CodeBuild

您也可以使用 AWS CodeBuild 配合 Docker 映像檔來設定架構。如需更多資訊,請參閱建置環境計算模式與類型

AWS 官方已更新 2 年前