从项目注册表访问Docker容器

时间:2018-06-13 12:10:14

标签: docker google-cloud-platform google-compute-engine

所以我将docker镜像上传到我的项目注册表。我可以导航到https://console.cloud.google.com/gcr/images/,我看到我的图片列在那里。

现在我想在这个项目上运行一个虚拟机,并在这个上使用docker来运行这个图像。

这是我的VM中的命令:

sudo /usr/bin/docker run eu.gcr.io/my-project-name/example001

回复是:

Unable to find image 'eu.gcr.io/.../example001:latest' locally
/usr/bin/docker: Error response from daemon: unauthorized: You don't have the needed permissions to perform this op
eration, and you may have invalid credentials. To authenticate your request, follow the steps in: https://cloud.goo
gle.com/container-registry/docs/advanced-authentication.
See '/usr/bin/docker run --help'.

请参阅附件中的图片。如果我定义" eu.gcr.io /...",我可以列出我的图像;作为我的项目路径。然而,机器似乎运行在" .gcr.io"那么因此无法访问我的图像?我该如何解决这个问题 - 为什么我的形象出现在" eu.gcr.io"和#34; .gcr.io"上的机器,我找不到一个方法来改变它(将图像移动到gcr.io或将机器移动到,eu.gcr.io)。但是,我不确定这是否是问题。

也许这是docker的身份验证问题? enter image description here

3 个答案:

答案 0 :(得分:0)

VM基本上不能在“.gcr.io”上,它可以在非欧洲地区/区域运行,但它应该不是问题。

从GCP访问控制的角度看,注册表只是一个存储桶。 所以我认为首先需要检查的是VM可以访问Google云端存储。 用gcloud:

gcloud compute instances describe <instance-name>

检查VM是否具有从devstorage读取的范围:

serviceAccounts:
- email: ...-compute@developer.gserviceaccount.com
  scopes:
  - https://www.googleapis.com/auth/devstorage.read_only
  - ...

此范围应该从注册表中读取:

  

https://www.googleapis.com/auth/devstorage.read_only

如果你在VM上没有这样的范围,但是配置了gcloud,你可以使用gcloud作为凭证助手:

gcloud auth configure-docker

如您所提及的文件中所述:https://cloud.google.com/container-registry/docs/advanced-authentication#gcloud_as_a_docker_credential_helper

答案 1 :(得分:0)

答案在这里找到:

https://serverfault.com/questions/900026/gcp-no-access-to-container-registry-from-compute-engine

这是需要授权的docker命令。这里不是主机名(eu.gcr.io)。我用了#gcloud docker - pull ...&#39;命令从存储库中获取映像以在我的VM中使用。

答案 2 :(得分:0)

在GCP上创建Linux VM后,通过SSH连接到它,您必须使用带有脚本的云端SDK 1或手动安装Google SDK 1

如果您正在运行Ubuntu,请按照文档here进行操作,如果您使用Red Hat或CentOS进行安装,请在完成Google SDK后遵循文档here,您必须运行gcloud init来初始化SDK,打开一个终端和磁带[gcloud init]你必须配置你的个人资料。之后你必须安装Docker

  • sudo apt-get -y install docker-ce
  • sudo systemctl start docker

您需要有权访问您将要推送和推送的注册表。

配置Docker以使用gcloud作为凭证助手。要使用gcloud as the crediential helper,请运行命令:

  • gcloud auth configure-docker

之后,您可以使用码头工具gcloud command在您的注册表中提取或推送图片,如下所示:

推送:gcloud docker - 推送gcr.io/google-containers/example-image:latest

pull:gcloud docker - pull gcr.io/google-containers/example-image:latest