使用AWS re:Post即您表示您同意 AWS re:Post 使用条款

如何解决导致我的 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 parameter 以设置目标架构。例如,Docker build --platform linux/arm64 [...] 用于构建 ARM64 的映像。Finch build --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

您还可以使用带有 Docker 映像的 AWS CodeBuild 来配置架构。有关详细信息,请参阅构建环境计算模式和类型

AWS 官方
AWS 官方已更新 7 个月前