解决 Google Container Registry ‘Access Denied’ 问题

45次阅读
没有评论

问题描述

在尝试将 Docker 镜像推送到 gcr.io/docker-url 时,用户遇到了 ‘Access Denied’ 错误。用户已经尝试过 Google 文档中的方法,也使用了docker login命令,但问题仍然没有解决。以下是用户运行的命令和错误信息:

docker push gcr.io/docker-url/jenkins/container
The push refers to repository [gcr.io/docker-url/jenkins/container]
d7ab52d2e8be: Pushing [==================================================>] 2.56kB
fae569eb21a4: Pushing 1.536kB
7a20d9096c74: Pushing [====> ] 735.7kB/7.854MB
a26d457fd72d: Pushing [> ] 60.93kB/6.055MB
36f2fac55108: Pushing [> ] 502.8kB/49.16MB
4cd936335289: Waiting
f1b5933fe4b5: Waiting
denied: Access denied.

用户还提到尝试使用 JSON 文件登录,并查阅了 StackOverflow 上的答案,但仍未解决问题。

解决方案

以下是两种可能的解决方案,你可以根据具体情况选择其中之一。

解决方案1:激活服务账号

在解决这个问题之前,请确保你的用户(或服务账号)具有写入 Google Container Registry 的权限。你可以通过以下步骤来解决 ‘Access Denied’ 问题:

  1. 使用服务账号的密钥文件激活服务账号身份:
gcloud auth activate-service-account --key-file key-file.json
  1. 使用上述激活的身份运行 Docker 镜像推送命令:
docker push gcr.io/docker-url/jenkins/container

这将使用激活的服务账号身份推送镜像,通常能够解决权限问题。注意,key-file.json 是你的服务账号的密钥文件名。

解决方案2:使用 OAuth2 Access Token

如果你使用 OAuth2 Access Token 进行身份验证,你可以尝试以下步骤:

  1. 使用以下命令获取 OAuth2 Access Token:
gcloud auth print-access-token
  1. 使用获取的 Access Token 运行 Docker 登录命令:
docker login -u oauth2accesstoken -p "YOUR_ACCESS_TOKEN" https://gcr.io
  1. 然后再次运行 Docker 镜像推送命令:
docker push gcr.io/docker-url/jenkins/container

这种方法将使用获取的 Access Token 进行身份验证,可能会解决权限问题。

请注意:在执行任何操作前,请确保你已备份相关文件和数据。以上操作可能因 Google Cloud Platform 版本差异而略有不同,请根据实际情况适当调整。

希望以上解决方案能够帮助你解决 ‘Access Denied’ 问题,顺利将 Docker 镜像推送到 Google Container Registry。如果问题仍然存在,你可能需要检查服务账号的权限设置,确保其具有必要的写入权限。

正文完