为什么 Amazon ECS 集群中的任务无法启动?

上次更新日期:2022 年 3 月 24 日

我尝试在我的 Amazon Elastic Container Service (Amazon ECS) 集群中放置一个任务。但是我的任务放置失败了,并且任务在我的集群中一直处于 RUNNING(正在运行)状态,没有发生变化。

简短描述

要成功在集群中放置任务,请选择以下任意一种解决方案:

  • 如果您将任务置于 Amazon ECS 服务中,请执行检查您的服务事件消息通过已停止任务检查错误部分中的步骤。
  • 如果您使用某个单独任务或计划任务来运行您的任务,则请执行通过已停止任务检查错误部分中的步骤。

解决方法

检查服务事件消息

  1. 打开 Amazon ECS 控制台
  2. 在导航菜单中选择集群,然后选择包含您的服务的集群。
  3. 在集群页面的服务选项卡上,在服务名称列选择您要检查的服务。
  4. 在该服务的页面上,选择事件
  5. 消息列查找错误或其他有用的信息。

根据您在步骤 5 中发现的结果,查看服务事件消息以排除错误所导致的故障。

注意:服务事件仅显示最近的 100 个事件。

通过已停止任务检查错误

重要提示:您仅可以看到最近 1 小时内停止的已停止任务。

  1. 打开 Amazon ECS 控制台
  2. 在导航菜单中,选择集群,然后选择包含您的已停止任务的集群。
  3. 在集群页面上,选择任务选项卡。
  4. 需要的任务状态表头中,选择已停止,然后选择要检查的已停止任务。首先将列出最近的已停止任务。
  5. 在已停止任务的详细信息选项卡中,检查停止原因字段来确定任务停止的原因。
  6. 如果存在已停止的容器且停止原因任务启动失败,请展开该容器,然后检查状态原因行以查看导致任务状态更改的原因。

根据您在步骤 5 中发现的结果,查看以下信息以解决错误:

  • 任务未通过 (elb elb-name) 中的 ELB 运行状况检查:当前任务未通过与任务服务关联的负载均衡器的 Elastic Load Balancing 运行状况检查。有关更多信息,请参阅服务负载均衡器故障排除
    注意:此根本原因仅适用于作为服务一部分启动的任务。
  • 由(部署 deployment-id)发起的扩缩活动:当您减少稳定服务的预期数量时,必须停止某些任务才能达到所需的数量。对于由于服务缩减而停止的任务,您会看到此停止原因。有关更多信息,请参阅服务弹性伸缩故障排除
    注意:此根本原因仅适用于作为服务一部分启动的任务。
  • 主机 EC2(实例 id)已停止/终止:如果您停止或终止了正在运行任务的 Amazon Elastic Compute Cloud (Amazon EC2) 容器实例,则会看到此停止原因。要调查您的 Amazon EC2 实例被终止的原因,请参阅为什么 Amazon EC2 终止了我的实例?
  • 用户强制注销容器实例:如果您强制注销带有正在运行任务的容器实例,则会看到此停止原因。
  • 任务中的基本容器已退出:如果在任务定义中标记为基本的容器退出或死亡,则该任务可能会停止。当基本容器退出是任务停止的原因时,您会看到此停止原因。在这种情况下,步骤 6 的发现提供了有关容器停止原因的更多诊断信息。

另外,请查看 API 故障原因

根据您在步骤 6 中发现的结果,查看以下信息以解决错误:

  • 如果容器状态含有错误 CannotPullContainerError,请参阅 CannotPullContainer 任务错误
  • 有关返回的其他错误消息以及有关这些错误消息的更多详细信息,请参阅已停止任务错误代码
  • 如果此检查未提供足够的信息,并且您使用了 EC2 启动类型,则请使用 SSH 连接到容器实例并在本地检查 Docker 容器。有关更多信息,请参阅检查 Docker 容器

注意:如果您使用了任何任务放置约束或策略,您的集群必须使用符合您的约束策略要求的实例。