Cloud Run提示镜像不存在但Container Registry中该镜像实际存在如何解决
Cloud Run 无法拉取 Container Registry 中已存在镜像的排查方案
- 检查 Cloud Run 运行服务账号权限
默认 Cloud Run 使用的服务账号为[项目编号]-compute@developer.gserviceaccount.com,需要为该账号授予目标 Container Registry 对应的roles/storage.objectViewer权限:Container Registry 底层依赖 Cloud Storage 存储镜像,缺少对象存储读取权限会触发镜像不存在的误报。 - 核对镜像路径完全匹配
逐一检查镜像全路径的每一段是否和 GCR 中实际存储的完全一致:- 区域前缀是否正确:如
gcr.io、us.gcr.io等区域域名不能写错 - 项目ID、镜像名称、标签/Digest 是否完全匹配,注意大小写、多余斜杠等低级错误
- 区域前缀是否正确:如
- 检查 Container Registry 对应存储桶权限
GCR 镜像实际存储在名为artifacts.[项目ID].appspot.com的 Cloud Storage 桶中,确认该桶的 IAM 策略没有额外限制,未阻止 Cloud Run 服务账号访问。 - 排查跨项目访问权限问题
如果镜像存储在 A 项目,Cloud Run 部署在 B 项目,需要单独为 B 项目的 Cloud Run 服务账号授予 A 项目 GCR 存储桶的读取权限。 - 排除网络策略限制
如果 Cloud Run 配置了 VPC 连接器,检查 VPC 的出口防火墙规则、私有 Google 访问配置是否阻止了访问 GCR 的请求,可临时关闭 VPC 连接器测试拉取是否正常。 - 本地验证镜像可拉取
执行命令gcloud docker -- pull [镜像全路径],确认镜像路径正确、可以正常拉取,排除镜像本身的配置问题。 - 检查部署YAML格式正确性
确认YAML中image字段没有多余符号、引号错误、拼写错误,格式符合Cloud Run部署规范。
内容的提问来源于stack exchange,提问作者Sophoun
相关产品推荐
相关产品推荐

