STOPPED(CannotPullContainerError:API错误(500)?

问题描述 投票:12回答:5

我在Amazon Fargate集群上运行任务时遇到此错误。有没有人见过这个?

amazon-web-services docker amazon-ecs aws-fargate
5个回答
6
投票

Farget必须使用公共IP。有关详细信息https://github.com/aws/amazon-ecs-agent/issues/1128


3
投票

转到文档以获取此答案的答案。

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_cannot_pull_image.html

由于您遇到500错误,我会留意第一个错误描述的建议,“连接超时”:

启动Fargate任务时,其弹性网络接口需要一条到Internet的路径来提取容器图像。如果在启动任务时收到类似于以下内容的错误,则是因为不存在到Internet的路由:

CannotPullContainerError: API error (500): Get https://111122223333.dkr.ecr.us-east-1.amazonaws.com/v2/: net/http: request canceled while waiting for connection

要解决此问题,您可以:

  • 对于公共子网中的任务,请在启动任务时指定ENABLED以自动分配公共IP ...
  • 对于私有子网中的任务,在启动任务时指定DISABLED以自动分配公共IP,并在VPC中配置NAT网关以将请求路由到Internet ...

如果您遇到与ECS任务相关的任何其他问题,无法启动或在启动时表现出奇怪的行为,请查看ECS troubleshooting topics的完整列表。

我遇到了类似的错误(404而不是500),但是,任务显示它正在运行,即使详细状态列出了错误。

事实证明,与任务相关联的角色(在这种情况下,与其运行的EC2实例的角色相同)不能由ecs-tasks承担。将以下信任关系语句添加到角色解决了问题:

{
  "Effect": "Allow",
  "Principal": {
    "Service": "ecs-tasks.amazonaws.com"
  },
  "Action": "sts:AssumeRole"
}

有关详细信息,请参阅Task Execution Roles上的特定页面。


0
投票

当容器无法从注册表中提取容器时,会发生此错误。

  1. 检查您是否正在为容器分配公共IP地址。目前,AWS容器注册表没有内部-vpn端点。
  2. 检查您的容器是否有连接到Internet的方法(例如:nat实例或类似内容)。
  3. 检查与容器关联的安全组是否允许出站流量。如果您使用terraform或类似物创建了SG,您可能会发现它默认没有出站规则。

0
投票

您必须为您的服务分配一个Public Ip,您可以在服务定义期间执行此操作,但据我所知您无法从更新菜单更新您的服务。


0
投票

如果您在没有Internet访问权限的私有VPC中运行ECS,请设置VPC endpoint for ECR and S3

© www.soinside.com 2019 - 2024. All rights reserved.