docker - 从没有 gcloud 的 Google Container Registry 中提取私有(private) docker 镜像

标签 docker google-compute-engine docker-compose docker-registry google-container-registry

我正在使用 Shippable 将私有(private) Docker 镜像推送到 Google Container Registry,然后我想从笔记本电脑本地或 Google Compute Engine 上的实例中提取该镜像。

我知道命令 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 或 key 来验证或访问图像?我想避免必须在需要拉取镜像的每台机器上安装 gcloud,并且镜像必须保持私有(private)。

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

提前感谢您的帮助。

最佳答案

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

两种主要方法是使用访问 token 或 JSON key 文件。

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

访问 token

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

JSON key 文件

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

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

  1. 打开凭据页面。
  2. 要设置新的服务帐号,请执行以下操作:
    • 点击添加凭据 > 服务帐户。
    • 选择是将服务帐号的公钥/私钥下载为标准 P12 文件,还是可以由 Google API 客户端库加载的 JSON 文件。
    • 您的新公钥/私钥对已生成并下载到您的机器上;它是该 key 的唯一副本。您有责任安全地存储它。

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

关于docker - 从没有 gcloud 的 Google Container Registry 中提取私有(private) docker 镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30926813/

相关文章:

Docker 停止所有容器

docker - 在 bluemix 中推送图像时出现无效错误

mongodb - Docker 中的 Mongo ReplicaSet - 无法添加用户 : not master

docker - 自定义端口在Docker-compose中不起作用

Git 在 Docker 容器中运行太慢

docker - 使用 docker-compose.yml 部署

ssh - Google 计算引擎 - 访问 SSH 几次后被阻止

mysql - Compute Engine Mysql 端口未连接

google-cloud-platform - Google 无服务器 VPC 连接器无法访问具有多个网络接口(interface)的 GCE 实例

docker-compose 并列出卷内容