GCP:无法从 ubuntu/debian VM 实例上的 GCP 私有容器注册表中提取 docker 镜像

Dav*_* JM 5 virtual-machine docker google-cloud-platform google-container-registry docker-compose

我正在尝试从ubuntu-1904Google Cloud 上运行的常规 VM 实例(即)上的私有 GCP 容器注册表中提取 docker 容器,但出现以下错误:

user@test ~ $ sudo docker pull example.io/docker-dev/name:v01

Error response from daemon: unauthorized: You don't have the needed permissions to perform this operation, and you may have invalid credentials. To authenticate your request, follow the steps in: https://cloud.google.com/container-registry/docs/advanced-authentication
Run Code Online (Sandbox Code Playgroud)

我按照这些说明进行操作,即运行该gcloud auth configure-docker命令,该命令会输出一条成功消息。

但是,docker pull再次运行该命令时,我得到完全相同的错误。

一些可能有助于提供反馈的额外测试:

  • 如果我从不同的注册表中拉取,它就可以工作(例如,docker run hello-world拉取并运行hello-world映像)
  • docker pull example.io/docker-dev/name:v01在本地计算机(Mac)而不是 vm 实例上测试了相同的命令 ( ) 并且运行良好。
  • 我还创建了 vm 实例并启用了“将容器映像部署到此 VM 实例”选项,提供了容器地址 ( example.io/docker-dev/name:v01),并且也有效。但是,我不想使用这个选项,因为它会自动选择一个“Container-Optimized”启动盘,由于限制我不想使用

问题:为什么我无法从 Ubuntu o Debian VM 上的私有容器注册表中提取 docker 映像,即使 docker 似乎可以很好地从其他存储库(docker hub)提取映像?

Ton*_*oni 9

我昨天做了这个。就跑gcloud auth configure-docker然后跑

VERSION=2.0.0
OS=linux  # or "darwin" for OSX, "windows" for Windows.
ARCH=amd64  # or "386" for 32-bit OSs, "arm64" for ARM 64.
Run Code Online (Sandbox Code Playgroud)

之后您可以下载 docker-credential-gcr

wget "https://github.com/GoogleCloudPlatform/docker-credential-gcr/releases/download/v${VERSION}/docker-credential-gcr_${OS}_${ARCH}-${VERSION}.tar.gz"
Run Code Online (Sandbox Code Playgroud)

然后运行

tar cvzf --to-stdout ./docker-credential-gcr_linux_amd64-2.0.0.tar.gz /usr/bin/docker-credential-gcloud && sudo chmod +x /usr/bin/docker-credential-gcloud
Run Code Online (Sandbox Code Playgroud)

最后运行

gcloud auth print-access-token | docker login -u oauth2accesstoken --password-stdin https://gcr.io
Run Code Online (Sandbox Code Playgroud)

现在您将能够提取图像了:)


war*_*den 7

对我来说,在容器操作系统优化的实例上,它有助于运行:

docker-credential-gcr configure-docker
Run Code Online (Sandbox Code Playgroud)

https://cloud.google.com/container-optimized-os/docs/how-to/run-container-instance#starting_a_docker_container_via_cloud-config

请注意计算实例的默认策略:

虚拟机实例(包括 Google Kubernetes Engine 集群中的虚拟机实例)必须配置正确的存储访问范围才能推送或拉取映像。默认情况下,当 Container Registry 位于同一项目中时,虚拟机可以拉取镜像。