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

从GCE推送镜像至Artifact Registry遇认证失败问题求助

问题:GCE推送Docker镜像至Artifact Registry(路由模式)时认证失败

我正尝试从Google Cloud Compute Engine(GCE)将Docker镜像推送至Artifact Registry,当前使用gcr.io主机名,且已将Container Registry设置为“路由至Artifact Registry”。在GCE内构建镜像后执行推送命令:

docker push gcr.io/$PROJECT_ID/$NAME:3.2.0

遇到错误:

unauthorized: authentication failed

已完成的排查步骤:

  • 通过gcloud config set account设置了服务账号
  • 执行gcloud auth application-default login完成登录
  • 运行gcloud auth configure-docker gcr.io,生成的config.json内容如下:
{
  "auths": {},
  "credHelpers": {
    "asia.gcr.io": "gcr",
    "eu.gcr.io": "gcr",
    "gcr.io": "gcloud",
    "marketplace.gcr.io": "gcr",
    "us.gcr.io": "gcr"
  }
}
  • Artifact Registry页面显示GCE服务账号拥有Artifact Registry Administrator角色
  • 可以正常拉取镜像,但无法推送

解决方法

1. 确认GCE实例关联的服务账号权限

你手动设置的服务账号不一定是GCE实例实际使用的账号——实例默认采用自身关联的服务账号。请:

  • 进入GCE实例详情页,查看「服务账号」字段,确认该账号已被授予roles/artifactregistry.writer或更高权限(如你提到的Administrator)
  • 若实例使用默认服务账号,需为该账号补充Artifact Registry的推送权限

2. 刷新身份凭证

GCE通过元数据服务器获取凭证,可能存在缓存过期问题,执行以下命令重置:

# 清除旧的默认应用凭证
gcloud auth application-default revoke
# 重新获取实例关联服务账号的凭证
gcloud auth application-default login --no-launch-browser
# 或直接激活实例绑定的服务账号(若有密钥文件)
gcloud auth activate-service-account --key-file=/path/to/your-service-account-key.json

3. 验证Docker登录有效性

直接通过gcloud令牌验证Docker是否能正常认证:

gcloud auth print-access-token | docker login -u oauth2accesstoken --password-stdin gcr.io

若登录成功,再重试推送命令。

4. 匹配仓库位置与路由规则

启用路由模式后,gcr.io仅对应多区域Artifact Registry仓库(如us、eu、asia)。若你的仓库是单区域(如us-central1),需使用对应区域域名(如us-central1.gcr.io)进行推送。

5. 检查网络连通性

确保GCE实例可访问Artifact Registry的HTTPS端点:

# 测试443端口连通性
telnet gcr.io 443
# 或检查HTTPS响应
curl -I https://gcr.io/v2/

若连接失败,排查实例的防火墙规则是否允许出站HTTPS流量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 18:32:44