我在Amazon Fargate集群上运行任务时遇到此错误。有没有人见过这个?
Farget必须使用公共IP。有关详细信息https://github.com/aws/amazon-ecs-agent/issues/1128
转到文档以获取此答案的答案。
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上的特定页面。
当容器无法从注册表中提取容器时,会发生此错误。
您必须为您的服务分配一个Public Ip,您可以在服务定义期间执行此操作,但据我所知您无法从更新菜单更新您的服务。
如果您在没有Internet访问权限的私有VPC中运行ECS,请设置VPC endpoint for ECR and S3。