You need to enable JavaScript to run this app. 无法将更新后的ECS镜像部署到现有服务,CodeBuild拉取ECR镜像报错如何解决
优惠活动
大模型
产品
解决方案
定价
更多

无法将更新后的ECS镜像部署到现有服务,CodeBuild拉取ECR镜像报错如何解决

问题修复步骤

该错误的核心原因是CodeBuild执行任务时使用的IAM服务角色缺少对应ECR镜像仓库的拉取权限,或未完成ECR登录认证、镜像地址填写错误导致的,可按以下步骤排查修复:

1. 为CodeBuild服务角色附加ECR权限

  • 打开IAM控制台,找到你的CodeBuild项目对应的服务角色,角色名默认格式为codebuild-<项目名>-service-role
  • 为该角色附加以下自定义权限策略,注意替换<region>、<AWS账号ID>、<ECR仓库名>为你的实际参数:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecr:GetDownloadUrlForLayer",
                "ecr:BatchGetImage",
                "ecr:BatchCheckLayerAvailability"
            ],
            "Resource": "arn:aws:ecr:<region>:<AWS账号ID>:repository/<ECR仓库名>"
        },
        {
            "Effect": "Allow",
            "Action": "ecr:GetAuthorizationToken",
            "Resource": "*"
        }
    ]
}

2. 检查buildspec配置的ECR登录逻辑

如果是构建过程中需要拉取ECR中的基础镜像,确认buildspec.yml的pre_build阶段已添加ECR登录命令:

aws ecr get-login-password --region <region> | docker login --username AWS --password-stdin <AWS账号ID>.dkr.ecr.<region>.amazonaws.com

3. 校验镜像地址正确性

检查CodeBuild配置或buildspec中填写的ECR镜像地址是否完全匹配已推送的镜像地址,标准格式为:
<AWS账号ID>.dkr.ecr.<region>.amazonaws.com/<仓库名>:<镜像标签>
确认仓库名、标签、区域、账号ID无拼写错误,镜像已经成功推送到对应ECR仓库。

额外排查项

  • 如果ECR仓库配置了VPC私有端点,确认CodeBuild的VPC配置可以正常访问该私有端点
  • 确认ECR仓库没有设置额外的资源策略,禁止对应账号的CodeBuild角色访问

内容的提问来源于stack exchange,提问作者rubyist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 20:45:05