Skip to content

如何解决 Amazon ECS 任务在容器退出时停止或无法启动的问题?

2 分钟阅读
0

我想对 ECS 集群中失败的 Amazon Elastic Container Service (Amazon ECS) 任务进行故障排除。

简短描述

您的容器可能会由于映像问题、应用程序问题、资源限制或其他问题而退出。

有关因映像问题导致的任务失败,请参阅当我的任务无法在 Amazon ECS 集群中启动时,如何解决“Image does not exist”(映像不存在)错误?

有关意外停止的 AWS Fargate 任务,请参阅 Amazon ECS 已停止任务错误消息

要分析导致 ECS 任务无法启动的其他问题,您可以使用 AWSSupport-TroubleshootECSTaskFailedToStart AWS Systems Manager Automation 运行手册。

您也可以手动对 Amazon ECS 集群进行故障排除。

解决方法

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

运行运行手册对集群进行故障排除

在启动 AWSSupport-TroubleshootECSTaskFailedToStart 运行手册之前,请确保您的 IAM 用户或角色拥有所需的权限。有关详细信息,请参阅 AWSSupport-TroubleshootECSTaskFailedToStartRequired IAM permissions(所需的 IAM 权限)部分。

要启动运行手册,请完成以下步骤:

  1. 在 AWS Systems Manager 控制台中打开 AWSSupport-TroubleshootECSTaskFailedToStart 文档。
  2. 选择 Execute automation(执行自动化)。
  3. 为输入参数输入以下值:
    (可选)**AutomationAssumeRole:**允许 Automation 为您执行操作的 IAM 角色的 ARN。如果您未指定角色,则自动化将使用启动运行手册的用户的权限。
    **ClusterName:**任务启动失败的 ECS 集群的名称。
    (可选)**CloudwatchRetentionPeriod:**将 AWS Lambda 函数日志存储在 Amazon CloudWatch Logs 中的保留期(以天为单位)。
    **注意:**当分析确定必须测试网络连通性时,请定义此值。默认值为 30 天。其他有效值为 1、3、5、7、14、60 和 90。
    **TaskId:**最近失败的任务的 ID。
  4. 选择 Execute(执行)。
    **注意:**有关运行手册步骤的详细信息,请参阅 AWSSupport-TroubleshootECSTaskFailedToStartDocument Steps(文档步骤)部分。
  5. Outputs(输出)部分中查看详细结果。输出包含以下信息:
    **TaskFailureReason:**对最终任务失败原因的分析。
    **ExecutionLogs:**运行手册执行的每个步骤的输出日志。
    **ENI_Deletion_Message.Status:**运行手册创建用于测试网络连接的 Lambda 函数时 Lambda 虚拟私有云 (VPC) 弹性网络接口删除的状态。
    **注意:**如果 ENI_Deletion_Message 显示网络接口未删除,请手动删除网络接口。

手动对 ECS 集群进行故障排除

检查服务事件日志中的诊断信息。此外,使用 Amazon ECS 控制台AWS CLI 检查已停止的任务是否存在错误。

要解决内存限制问题,请参阅如何为 Amazon ECS 中的任务分配内存?

如果您已经配置了日志驱动程序,请在应用程序日志中检查是否存在应用程序问题。例如,如果在任务定义中配置了 awslogs 日志驱动程序,请在 Amazon CloudWatch 中查看 awslogs 容器日志。或者,使用任务定义中的日志配置选项将日志发送到容器支持的日志驱动程序。

Fargate 以外的 ECS 任务

如果您将默认 JSON 文件日志驱动程序与 Amazon Elastic Compute Cloud (Amazon EC2) 启动类型一起使用,请运行以下 Docker 日志命令:

docker logs dc7240fe892a

**注意:**将 dc7240fe892a 替换为您的容器 ID。

前面的命令将检查您的 ECS 容器实例上的容器的 Docker 日志。有关 JSON 日志驱动程序的详细信息,请参阅 Docker 网站上的 JSON 文件日志记录驱动程序

Fargate 任务

awslogs 日志驱动程序会将这些日志从 Docker 传递到 CloudWatch Logs。这些日志显示来自命令输出的 STDOUTSTDERR I/O 流。

相关信息

AWS Support 自动化工作流程 (SAW)

设置自动化

运行由 Systems Manager Automation 支持的自动化操作

AWS 官方已更新 8 个月前