在公共子网中运行的Fargate任务无法拉取容器镜像,出现CannotPullContainerError。
0
【以下的问题经过翻译处理】 你好,我有一个用于Fargate集群的任务定义,镜像位于ECR上,但由于某些原因它无法从ECR拉取容器镜像...
由于之前已经有过这样的问题,因此我参考了以下链接进行故障排除:
- https://docs.aws.amazon.com/AmazonECR/latest/userguide/ECR_on_ECS.html
- https://repost.aws/questions/QU2e6oTgeWRiiL48Y5OAmymg/ecs-fargate-tasks-not-running-stopping-with-error-cannotpullcontainererror
从我了解的情况来看,有两个关键因素:
- 从任务访问ECR的角色访问权限
- 公共子网的互联网访问权限
我的任务具有以下定义:
- ecsTaskExecutionRole 具有 -> AmazonECSTaskExecutionRolePolicy -> 分配了以下操作
"Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*"
- 使用 awsvpc 网络模式
- 在定义中使用了正确的镜像URI
- 它正在使用映射到互联网网关的公共子网
- 为任务的 ENI 分配了公共IP地址
我还遗漏了什么其他问题吗?
附上一些图像作为参考。
1回答
- 新しい順
- 投票が多い順
- コメントが多い順
これらの回答は役に立ちましたか?コミュニティがあなたの知識を活用できるように、正解に賛成票を投じてください。
0
【以下的回答经过翻译处理】 我找到了答案,任务定义引用了“LATEST”镜像标签而非版本号。看看能否将镜像推送到ECR并将“Latest”作为标签,这样每次更新容器时就不需要更新任务定义了。