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

从GCE实例上的Jenkins推送Docker镜像至GCR失败,如何解决?

解决Jenkins(GCE默认服务账号)推送镜像至GCR权限不足的问题

我之前也碰到过一模一样的权限报错,核心原因就是GCE默认给Jenkins实例分配的服务账号没有足够的权限去操作Google Container Registry(GCR底层依赖Cloud Storage存储桶)。下面是我亲测有效的解决步骤:

1. 确认Jenkins实例使用的默认服务账号

首先得找到你的Jenkins所在GCE实例绑定的服务账号:

  • 打开GCP控制台的Compute Engine页面,找到运行Jenkins的实例
  • 点击实例名称进入详情页,在服务账号字段里记下对应的邮箱地址(格式一般是[项目编号]-compute@developer.gserviceaccount.com)

2. 给服务账号添加GCR所需权限

接下来要给这个服务账号配置最小必要的权限,避免过度授权:

  • 打开GCP控制台的IAM与管理员页面,在搜索框输入刚才记下的服务账号邮箱,找到对应的条目
  • 点击条目右侧的编辑按钮,选择添加角色
  • 添加以下两个角色(满足推送镜像的最小权限需求):
    • Storage Object Creator:允许上传(推送)镜像文件到GCR对应的存储桶
    • Storage Object Viewer:允许读取存储桶内的元数据,确保推送流程能正常完成

    如果你需要更简化的配置,也可以直接添加Container Registry Service Agent角色,这个角色是GCP官方为操作GCR设计的专用角色

3. 在Jenkins构建脚本中配置Docker凭据

确保Jenkins在推送镜像前能正确获取服务账号的凭据:

  • 在你的Jenkins构建步骤里,添加一个shell脚本步骤,先执行:
    gcloud auth configure-docker gcr.io
    
    这个命令会自动将GCE默认服务账号的凭据写入Docker的配置文件,让Docker能以服务账号的身份访问GCR,不需要手动输入密码

4. (可选)重启Jenkins实例

有时候IAM权限变更后,GCE实例的凭据缓存不会立即刷新,重启Jenkins所在的GCE实例可以确保服务账号获取到最新的权限:

  • 在Compute Engine页面选中Jenkins实例,点击重启按钮即可

完成以上步骤后,重新运行Jenkins构建任务,应该就能正常推送镜像到GCR了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:21:40