我在Amazon Fargate群集上运行任务时遇到此错误。有没有人见过这个呢?
答案 0 :(得分:6)
Farget必须使用公共IP。 有关详细信息https://github.com/aws/amazon-ecs-agent/issues/1128
答案 1 :(得分: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
要解决此问题,您可以:
对于公共子网中的任务,在启动任务时为自动分配公共IP 指定已启用 ...
对于专用子网中的任务,在启动任务时为自动分配公用IP 指定 DISABLED ,并在VPC中配置NAT网关以路由请求上网...
如果遇到与ECS任务没有启动或启动时表现出怪异行为有关的其他问题,请检查ECS troubleshooting topics的完整列表。
我遇到了类似的错误(404
而不是500
),但是,即使详细状态列出了错误,任务也显示它正在运行。
事实证明,ecs-tasks无法承担与任务关联的角色(在这种情况下,角色与其运行的EC2实例相同)。在角色中添加以下信任关系语句即可解决此问题:
{
"Effect": "Allow",
"Principal": {
"Service": "ecs-tasks.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
有关更多详细信息,请参见Task Execution Roles上的特定页面。
答案 2 :(得分:1)
公共IP不是强制性的,缺少用于创建有效NAT网关的规范。在GitHub issue,Amazon技术人员会不断重复您“只是”需要私有IP + NAT的事实,但是事实并非如此。我为此进行了很多努力,但最终使它正常工作,而未在我的Fargate服务中使用公共IP。
要使Fargate服务在没有公共IP的情况下访问Internet,您需要设置一个具有2个子网的VPC:
您可以通过两种方式创建这样的VPC:通过转到Services
> VPC
> VPC Dashboard
,单击Launch VPC Wizard
并选择"VPC with Public and Private Subnets"
;或手动:
注意:以下所有步骤均在Services
> VPC
Your VPCs
和Create a VPC
Subnets
和Create subnet
2次
private
子网
public
子网
Internet Gateways
和Create internet gateway
Internet Gateway
,Actions
,Attach to VPC
并将其附加到重点VPC上NAT Gateways
和Create NAT Gateway
public
子网Create New EIP
或使用现有的已有的Available
Route Tables
和Create route table
2次
private
路由表
Routes
标签,Edit routes
Add route
,目标:0.0.0.0/0
,目标是先前创建的NAT网关和Save routes
Actions
和Set Main Route Table
(如果尚未选择)public
路由表
Routes
标签,Edit routes
Add route
,目标:0.0.0.0/0
,定位到先前创建的Internet网关和Save routes
Subnet Associations
标签,Edit subnet associations
public
子网Save
您放置在 public
子网中的每个服务将具有双向互联网访问权限,并且您放置在 private
中的每个服务< / strong>子网将仅具有传出互联网访问权限(是的, private
子网中具有公网IP的Fargate和EC2服务将具有互联网访问权限。)>
答案 3 :(得分:0)
当容器无法从注册表中拉出容器时,会发生此错误。
答案 4 :(得分:0)
您必须为服务分配一个公共IP,您可以在服务定义期间执行此操作,但据我所知,您无法从更新菜单中更新服务。
答案 5 :(得分:0)
如果您在无法访问互联网的私有VPC中运行ECS,请设置VPC endpoint for ECR and S3。
答案 6 :(得分:0)
确保您的子网可以访问Internet。以我为例,fargate任务已部署到专用子网。虽然此子网配置了nat网关,但公共子网没有通往Internet网关的路由。