跳至内容

如何解决 Amazon ECS 中的“no container instance met all of its requirements”错误?

2 分钟阅读
0

我想在 Amazon Elastic Container Service (Amazon ECS) 中部署任务,但我收到以下错误:“[AWS service] was unable to place a task because no container instance met all of its requirements.”

解决方法

注意: 如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 Troubleshooting errors for the AWS CLI(AWS CLI 错误故障排除)。此外,请确认您使用的是最新版本的 AWS CLI

如果您的容器实例缺少要求,则 Amazon ECS 无法部署任务。要解决 no container instance met all of its requirements 错误,请检查错误详细信息,然后完成相关的故障排除步骤。

错误详细信息: 集群中没有注册的容器实例

当您的集群中没有容器实例时,就会出现此问题。要解决此问题,请向您的集群添加容器实例。此外,请确保您的容器实例并非无法注册到 Amazon ECS 集群

错误详细信息: 匹配最接近的容器实例遇到错误“AGENT”

当在指定用于下达任务的容器实例上运行的 Amazon ECS 容器代理断开连接时,您会收到此错误。要解决此错误,请参阅如何解决 Amazon ECS 中我的服务出现的错误“the closest matching container-instance container-instance-id encountered error 'AGENT'”?

错误详细信息: 匹配最接近的容器实例已在使用任务所需的端口

当容器实例所需的端口已在实例中使用时,您会收到此错误。您不能在同一个端口上运行多个任务。要解决此问题,请向您的集群添加更多实例容器。或者,要允许您的任务使用容器实例上的任何可用端口,请使用动态端口映射

错误详细信息: 匹配最接近的容器实例的可用内存、CPU 或 GPU 单元不足

如果您收到错误 insufficient memoryinsufficient GPUinsufficient CPU,请检查每个任务和容器实例使用的资源。要解决此问题,请完成以下步骤:

有关 CPU 不足的信息,请参阅 如何解决 Amazon ECS 中的“the closest matching container-instance container-instance-id has insufficient CPU units available”错误?

要根据资源需求自动扩展您的 EC2 实例,请在开启托管式扩展的情况下为 EC2 工作负载使用 Amazon ECS 容量提供程序。容量提供程序会自动调整您的自动扩缩组中的 EC2 实例数量,以满足任务的资源需求。有关详细信息,请参阅适用于 EC2 工作负载的 Amazon ECS 容量提供程序通过集群自动扩缩功能自动管理 Amazon ECS 容量

错误详细信息: 无法放置任务资源 eni 或超出实例网络接口限制

如果容器实例没有可用的弹性网络接口连接点,请减少任务和任务副本的数量。或者,向您的集群添加更多容器实例。如果问题仍然存在,请使用 awsvpcTrunking 来增加您的 Amazon Elastic Compute Cloud (Amazon EC2) 实例上的弹性网络接口密度。

错误详细信息: 匹配最接近的容器实例缺少任务所需的属性

当您的任务定义包含需要容器实例中缺少的容器实例属性的参数时,您会收到此错误。

要检查在容器实例上注册的属性,请运行 describe-container-instances AWS CLI 命令:

aws ecs describe-container-instances \
    --cluster CLUSTER-NAME \
    --container-instances CONTAINER-INSTANCE-ID \
    --region REGION

注意:CLUSTER-NAME 替换为您的集群名称。将 CONTAINER-INSTANCE-ID 替换为您的容器实例 ID 或 ARN。将 REGION 替换为您的 AWS 区域。

查看输出中的 attributes(属性)数组,并将其与任务定义所需的属性进行比较。任务定义中列出但容器实例输出中不存在的任何属性都是缺失的属性。

您可以将 Amazon ECS 服务配置为在与容器实例子网不同的子网上运行。在这种情况下,即使任务因缺失属性错误而失败,attributes(属性)输出也不会显示缺失的属性。您的服务和容器实例的子网必须匹配。要解决此问题,请在容器实例所在的子网中重新创建 Amazon ECS 服务。

注意: 一些任务定义参数需要在容器实例上使用特定的 Docker 远程 API 版本。其他参数(例如日志记录驱动程序选项)要求容器实例使用 ECS_AVAILABLE_LOGGING_DRIVERS 代理配置变量来注册这些日志驱动程序。有关详细信息,请参阅 Amazon ECS 任务定义参数Amazon ECS 容器代理配置

如果您的任务启用了 Amazon ECS Exec,则容器实例可能缺少 ecs.capability.execute-command 属性。此属性默认存在于 ECS 优化的亚马逊机器映像 (AMI) 上,但自定义 AMI 中可能缺少此属性。要解决此问题,请完成以下操作之一:

错误详细信息: 未满足 ABCDXYZ 放置约束

如果您使用放置约束将任务放置在特定实例中,请确认容器实例支持选定的属性或约束。

例如,对于 distinctInstance,Amazon ECS 会将每个活动任务都放置在不同的容器实例上。如果有 5 个任务和 3 个容器实例可用,则任务放置会失败,您会收到 constraint unsatisfied 错误。要解决 distinctInstance 的此问题,请向您的集群添加更多容器实例。

相关信息

Amazon ECS 故障排除

Create an ECS service(创建 ECS 服务)

查看 Amazon ECS 服务事件消息

Amazon ECS 服务事件消息

AWS 官方已更新 6 个月前