从 Google Container Registry w/o gcloud 拉取私有 docker 图像

Pull private docker images from Google Container Registry w/o gcloud

我正在使用 shippable 将私有 docker 图像推送到 Google Container Registry,然后我想从本地笔记本电脑或 [=30] 上的实例中提取它=] 计算引擎。

我知道命令 gcloud preview docker pull gcr.io/projectID/image-name 有效,但我不能指望有人可能需要从中提取图像的每台机器上都安装了 gcloud。

如果我在我的机器上 运行 docker-compose up -d 然后我得到以下错误:

Pulling image gcr.io/projectID/image-name...
Pulling repository gcr.io/projectID/image-name
Traceback (most recent call last):
  File "<string>", line 3, in <module>
  File "/compose/build/docker-compose/out00-PYZ.pyz/compose.cli.main", line 31, in main
  File "/compose/build/docker-compose/out00-PYZ.pyz/compose.cli.docopt_command", line 21, in sys_dispatch
  File "/compose/build/docker-compose/out00-PYZ.pyz/compose.cli.command", line 27, in dispatch
  File "/compose/build/docker-compose/out00-PYZ.pyz/compose.cli.docopt_command", line 24, in dispatch
  File "/compose/build/docker-compose/out00-PYZ.pyz/compose.cli.command", line 59, in perform_command
  File "/compose/build/docker-compose/out00-PYZ.pyz/compose.cli.main", line 464, in up
  File "/compose/build/docker-compose/out00-PYZ.pyz/compose.project", line 208, in up
  File "/compose/build/docker-compose/out00-PYZ.pyz/compose.service", line 214, in recreate_containers
  File "/compose/build/docker-compose/out00-PYZ.pyz/compose.service", line 199, in create_container
  File "/compose/build/docker-compose/out00-PYZ.pyz/compose.progress_stream", line 37, in stream_output
  File "/compose/build/docker-compose/out00-PYZ.pyz/compose.progress_stream", line 50, in print_output_event
compose.progress_stream.StreamOutputError: Error: Status 403 trying to pull repository projectID/image-name: "Access denied."

是否有任何方法可以使用某种形式的 OAuth 或密钥来验证或访问图像?我想避免在每台需要拉取镜像的机器上安装 gcloud,并且镜像必须保持私有。

我试过 gcloud preview docker -a 但这不是我正在寻找的解决方案。

提前感谢您的帮助。

如果您想在不在 Google Compute Engine(即本地)的机器上使用 vanilla docker 使用 Google Container Registry,您可以 follow Google's instructions .

两种主要方法是使用访问令牌或 JSON 密钥文件。

请注意,_token_json_key 是您为用户名 (-u) 提供的实际值

访问令牌

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

JSON 密钥文件

$ docker login -e 1234@5678.com -u _json_key -p "$(cat keyfile.json)" https://gcr.io

要创建密钥文件,您可以按照以下说明操作:

  1. 打开凭据页面。
  2. 要设置新的服务帐户,请执行以下操作:
    • 单击“添加凭据”>“服务帐户”。
    • 选择是将服务帐户的 public/private 密钥下载为标准 P12 文件,还是下载为可由 Google API 客户端加载的 JSON 文件图书馆。
    • 您的新 public/private 密钥对已生成并下载到您的计算机;它作为此密钥的唯一副本。您有责任安全地存储它。

你可以view Google's documentation on generating a key file here.

你也可以按照下面的方法来做。

cat service-account.json | docker login -u _json_key --password-stdin https://gcr.io