无法推送到 Google Container Registry(无法访问存储库)

Unable to Push to Google Container Registry (unable to access the repository)

每当我尝试将容器从我的本地计算机推送到 Google Container Registry 时,我都会收到以下错误:

denied: Unable to access the repository; please check that you have permission to access it.

如果我打开 Cloud Shell,我可以毫无问题地推送容器。我试过几次"gcloud auth login",但似乎没有什么区别。我在本地 运行 其他 gcloud 命令没有任何问题。任何帮助将不胜感激。

这听起来像是 gcloud 可能不知道将您关联为哪个项目。

你可以运行

gcloud info

验证 gcloud 使用的是哪个项目。

如果它没有列出您将图像推送到的项目,您可以使用 --project 标志指定它,例如

gcloud --project= docker push ...

要为 gcloud 设置默认项目,您可以 运行

gcloud config set project

你有运行 gcloud auth登录吗?

供其他客户参考 运行 类似问题: https://github.com/docker/docker/issues/22910

当前版本的 Docker 客户端(1.11、1.12)和在新安装中启用的默认凭据存储存在一个错误,这会破坏私有注册表。删除

"credsStore": "whatever"

来自您的 docker 配置的字段(例如 ~/.docker/config.json)和 运行

gcloud docker ...

应该可以解决这个问题。

更新:

或者,我们实施了自己的凭据帮助程序,它解决了 我们客户 的问题(即不会因Docker 客户端用于请求凭据的 GCR URL)。 安装凭证助手:

  • 下载辅助二进制文件并将其放在您的 PATH 中
  • 执行docker-credential-gcr configure-docker配置到Docker客户端

只是为了给出更新的答案:我想推送到 eu.gcr.io。因此,我需要向 that 注册表进行身份验证(我花了一段时间才弄明白)。

首先:

docker login -e 1234@5678.com -u oauth2accesstoken -p "$(gcloud auth print-access-token)" https://eu.gcr.io

第二个:

 gcloud docker -- push eu.gcr.io/myProjectName/myComputeMachineName

在 windows 10 pro(在 Hyper-V 上)和这些版本上使用 cygwin:

$ gcloud --version
Google Cloud SDK 148.0.0
bq 2.0.24
bq-nix 2.0.24
core 2017.03.17
core-nix 2017.02.28
gcloud
gcloud-deps 2017.02.28
gcloud-deps-linux-x86_64 2017.02.28
gsutil 4.23
gsutil-nix 4.22

$ docker --version
Docker version 17.03.1-ce-rc1, build 3476dbf

我在个人项目上尝试使用 GCP 时遇到了同样的问题:

查看 GCP 控制台中的 activity 选项卡,我发现我正在尝试使用我的专业电子邮件地址进行推送(该项目不允许),即使我只是使用个人电子邮件地址登录也是如此:

gcloud auth login 

原因是几个月前我也运行这个命令:

gcloud auth application-default login

使用我的专业电子邮件地址。

我只需要再次 运行 它,使用我的个人地址登录,一切正常!

我遇到了同样的问题,在我完全删除 gcloud info(安装和配置目录)下列出的文件夹然后重新安装 sdk 之前,没有任何解决办法。

然后 运行 gcloud components install docker-credential-gcr 并进行备份。一切正常。