Вытяните частные изображения докеров из реестра Google Container без gcloud

Я использую shippable для отправки личных изображений докеров в реестр Google Container, которые затем я хочу извлечь из локально на ноутбук или внутри экземпляра в 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 или ключей? Я хочу избежать необходимости устанавливать gcloud на каждую машину, которая когда-либо понадобится, чтобы потянуть изображение, и изображения должны оставаться закрытыми.

Я пробовал gcloud preview docker -a, но это не то решение, которое я ищу.

Заранее благодарим за любую помощь.

Ответ 1

Если вы хотите работать с реестром Google Container на компьютере, который не находится в Google Compute Engine (то есть локальном), используя ванильный докер, вы можете следовать инструкциям Google.

В двух основных методах используется токен доступа или файл ключа JSON.

Обратите внимание, что _token и _json_key - это фактические значения, которые вы указываете для имени пользователя (-u)

Ток доступа

$ docker login -e [email protected] -u _token -p "$(gcloud auth print-access-token)" https://gcr.io

Файл ключа JSON

$ docker login -e [email protected] -u _json_key -p "$(cat keyfile.json)" https://gcr.io

Чтобы создать файл ключа, вы можете следовать этим инструкциям:

  • Откройте страницу учетных данных.
  • Чтобы настроить новую учетную запись службы, выполните следующие действия:
    • Нажмите Добавить учетные данные > Учетная запись службы.
    • Выберите, следует ли публиковать/закрывать ключ учетной записи службы как стандартный файл P12 или как файл JSON, который может быть загружен клиентской библиотекой Google API.
    • Ваша новая пара открытого/закрытого ключа создается и загружается на ваш компьютер; он служит единственной копией этого ключа. Вы несете ответственность за их надежное хранение.

Вы можете просмотреть документацию Google по генерации ключевого файла здесь.