You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EC2实例上Jenkins推送Docker镜像到AWS ECR遇权限拒绝求助

解决ECR推送权限拒绝问题

以下是针对你遇到的ECR推送权限拒绝问题的排查和解决步骤:

1. 修正Docker标签与推送命令的仓库URI

从错误日志可以看到,推送的仓库名称是[reponame],这是短名称,没有关联到AWS ECR的完整仓库地址,导致Docker无法正确识别目标ECR仓库,进而触发权限验证失败。

你需要将docker tag和docker push命令中的仓库名替换为完整的ECR仓库URI,格式为:
${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/<你的仓库名称>

修正后的流水线阶段代码如下:

stage('AWS ECR Login'){
    steps {
        script {
            sh """aws ecr get-login-password --region ${AWS_DEFAULT_REGION} | docker login --username AWS --password-stdin ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com"""
            # 替换<local-image>为你本地构建的镜像名称,<your-repo>为ECR仓库名
            sh "docker tag <local-image>:latest ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/<your-repo>:latest"
            sh "docker push ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/<your-repo>:latest"
        }
    }
}

2. 确认ECR仓库存在且信息匹配

  • 检查目标ECR仓库是否已在指定的${AWS_DEFAULT_REGION}区域、${AWS_ACCOUNT_ID}账号下创建
  • 确保流水线中使用的仓库名称与ECR控制台中的仓库名称完全一致(区分大小写)

3. 验证EC2实例的IAM角色权限

虽然你配置了ECR全访问权限,但仍需确认:

  • EC2实例关联的IAM角色已附加正确的权限策略,比如AmazonEC2ContainerRegistryFullAccess管理策略
  • 如果使用自定义策略,需确保包含以下必要权限(资源可指定为目标仓库ARN或*):
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "ecr:GetAuthorizationToken",
                    "ecr:BatchCheckLayerAvailability",
                    "ecr:GetDownloadUrlForLayer",
                    "ecr:GetRepositoryPolicy",
                    "ecr:DescribeRepositories",
                    "ecr:ListImages",
                    "ecr:BatchGetImage",
                    "ecr:InitiateLayerUpload",
                    "ecr:UploadLayerPart",
                    "ecr:CompleteLayerUpload",
                    "ecr:PutImage"
                ],
                "Resource": "*"
            }
        ]
    }
    

4. 确认Docker登录会话有效性

虽然日志显示Login Succeeded,但可尝试在EC2实例上手动执行登录和推送命令,验证权限是否正常:

# 获取登录凭证并登录
aws ecr get-login-password --region ${AWS_DEFAULT_REGION} | docker login --username AWS --password-stdin ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com
# 手动标记并推送镜像
docker tag <local-image>:latest ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/<your-repo>:latest
docker push ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/<your-repo>:latest

如果手动执行仍报错,可进一步排查IAM角色关联或ECR仓库权限配置问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 15:46:24