9

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

denied:无法访问存储库;请检查您是否有权访问它。

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

4

6 回答 6

6

其他遇到类似问题的客户仅供参考: 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 客户端
于 2016-09-01T21:48:07.467 回答
2

你有运行 gcloud auth login 吗?

于 2016-09-01T20:18:42.600 回答
1

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

你可以跑

gcloud信息

验证 gcloud 正在使用哪个项目。

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

gcloud --project= docker push ...

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

gcloud 配置集项目

于 2016-09-01T18:04:04.473 回答
1

我有同样的问题,直到我完全删除gcloud info(安装和配置目录)下列出的文件夹然后重新安装 sdk 才解决它。

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

于 2017-10-07T18:37:14.893 回答
0

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

所以首先:

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
于 2017-03-28T17:50:29.700 回答
0

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

查看 GCP 控制台中的活动选项卡显示我正在尝试使用我的专业电子邮件地址(项目不允许)推送,即使我只是使用我的个人电子邮件地址登录:

gcloud auth login 

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

gcloud auth application-default login

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

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

于 2017-08-27T09:43:07.580 回答