Вытяните частные изображения докеров из реестра 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 по генерации ключевого файла здесь.