所以我将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)。但是,我不确定这是否是问题。
答案 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 - ...
此范围应该从注册表中读取:
如果你在VM上没有这样的范围,但是配置了gcloud,你可以使用gcloud作为凭证助手:
gcloud auth configure-docker
答案 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
您需要有权访问您将要推送和推送的注册表。
配置Docker以使用gcloud作为凭证助手。要使用gcloud as the crediential helper,请运行命令:
之后,您可以使用码头工具gcloud command在您的注册表中提取或推送图片,如下所示:
推送:gcloud docker - 推送gcr.io/google-containers/example-image:latest
pull:gcloud docker - pull gcr.io/google-containers/example-image:latest