如何解决 Fargate 的 Amazon ECS 中的“dockertimeouterror unable transition start timeout after wait 3m0s”错误?

2 分钟阅读
0

我在 AWS Fargate 的 Amazon Elastic Container Service(Amazon ECS)任务中出现“dockertimeouterror unable transition start timeout after wait 3m0s”错误。

简短描述

如果您的 Fargate 任务出现联网配置问题,就会出现此错误。对于 Fargate,启动超时的默认值为 3 分钟。如果任务在 3 分钟内没有从待处理状态切换到运行状态,则该任务将失败并移至停止状态。

对于在未配置 NAT 实例或网关的私有子网中运行的 Fargate 任务,请配置正确的 Amazon Virtual Private Cloud(Amazon VPC)端点。您必须有以下端点:

  • **Amazon Elastic Container Registry(Amazon ECR)**这个端点是从 ECR 存储库中提取映像所必需的。
  • **Amazon Simple Storage Service(Amazon S3)**此端点是必需的,因为 Amazon ECR 使用 Amazon S3 来存储您的映像层。要从 Amazon ECR 下载映像,容器必须访问 Amazon ECR 以获取映像清单,并访问 Amazon S3 才能下载映像层。
  • **AWS Secrets Manager 和/或 AWS Systems Manager:**如果您在任务定义中引用 Secrets Manager 密钥或 Systems Manager Parameter Store 参数,则需要这些端点。您必须为 Secrets Manager 或 Systems Manager 创建接口 VPC 端点,以便这些任务可以访问相关服务。您只能从托管敏感数据的特定服务(Secrets Manager 或 Systems Manager)中创建端点。
  • **Amazon CloudWatch:**当 Fargate 任务使用 awslogs 作为日志记录驱动程序时,此端点是必需的。使用 awslogs 作为日志记录驱动程序的任务会将其日志导出到 CloudWatch。如果您使用 awslogs 并且 CloudWatch 的 VPC 端点已创建但尚未启动,则您的任务无法访问该端点。您会收到以下错误: "DockerTimeoutError: Could not transition to started; timed out after waiting 3m0s."

解决方法

检查您的任务定义是否使用 awslogs 日志记录驱动程序

完成以下步骤:

  1. 打开 Amazon ECS 控制台
  2. 在导航窗格中,选择任务定义
  3. 选择您的任务或服务使用的任务定义,然后选择您的任务定义名称。
  4. 在任务定义的容器定义部分,在容器名称列中选择您的容器的扩展器图标。
  5. 日志配置子章节中,检查日志驱动器是否设置为 awslogs

**重要事项:**如果您的任务在没有 NAT 网关或 NAT 实例的私有子网中运行,则必须使用 VPC 端点。

确认您有 Fargate 任务的 VPC 端点

完成以下步骤:

  1. 打开 Amazon VPC 控制台
  2. 在导航窗格中,选择端点
  3. 检查服务名称字段中是否存在 com.amazonaws.region.logs

如果该端点不存在,则创建一个新的端点

如果端点已经存在,则确认该端点是否与运行 Fargate 任务的 VPC 相同。要在 VPC 控制台中执行此操作,请选择端点,然后在端点的详细信息选项卡中查找 VPC ID

如果该端点与 Fargate 任务不在同一 VPC 中使用,则创建一个新的端点

如果该端点与 Fargate 任务在同一 VPC 中使用,则检查与此 VPC 关联的安全组中是否存在以下信息:

  • 安全组的入口规则必须允许来自 Fargate 任务的端口 443 流量。
  • 与 Fargate 任务关联的安全组必须具有出口规则,才能将端口 443 上的流量发送到 VPC 端点。

相关信息

Amazon ECR interface VPC endpoints (AWS PrivateLink)

AWS 官方
AWS 官方已更新 1 年前