GCP: невозможно получить образы докеров из нашего частного реестра контейнеров GCP на экземплярах виртуальных машин ubuntu / debian

Я пытаюсь вытащить контейнер докеров из нашего частного реестра контейнеров GCP на обычном экземпляре виртуальной машины (т.е. ubuntu-1904), работающем в Google Cloud, но получаю следующую ошибку:

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

Я выполнил эти инструкции, т.е. запустил команду gcloud auth configure-docker, которая выдает сообщение об успехе.

Однако при повторном запуске команды docker pull я получаю ту же ошибку.

Пара дополнительных тестов, которые могут помочь получить обратную связь:

  • Если я извлекаю из другого реестра, он работает (например, docker run hello-world извлекает и запускает образ hello-world)
  • Я протестировал ту же команду (docker pull example.io/docker-dev/name:v01) на моем локальном компьютере (Mac) вместо экземпляра vm и отлично работает.
  • Я также создал экземпляры vm и включил опцию «Развернуть образ контейнера в этом экземпляре виртуальной машины», указав адрес контейнера (example.io/docker-dev/name:v01), и это тоже работает. Однако я не хочу использовать этот параметр, потому что он автоматически выбирает загрузочный диск «Оптимизированный для контейнера», который я предпочитаю не использовать из-за ограничений

Вопрос: почему я не могу извлечь образы докеров из моего частного реестра контейнеров на виртуальной машине Ubuntu o Debian, хотя докер, кажется, работает очень хорошо, извлекая образы из других репозиториев (докер-хаб)?




Ответы (3)


Для меня на экземпляре, оптимизированном для ОС, помогло просто запустить:

docker-credential-gcr configure-docker

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

Обратите внимание на политику по умолчанию для вычислительных экземпляров:

Экземпляры виртуальных машин, в том числе в кластерах Google Kubernetes Engine, должны иметь правильные области доступа к хранилищу, настроенные для отправки или получения образов. По умолчанию виртуальные машины могут извлекать образы, когда реестр контейнеров находится в том же проекте.

person warden    schedule 21.05.2020

Я сделал это вчера. Просто запустите 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.

После этого вы можете скачать docker-credential-gcr

wget "https://github.com/GoogleCloudPlatform/docker-credential-gcr/releases/download/v${VERSION}/docker-credential-gcr_${OS}_${ARCH}-${VERSION}.tar.gz"

Тогда беги

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

И, наконец, беги

gcloud auth print-access-token | docker login -u oauth2accesstoken --password-stdin https://gcr.io

Теперь вы сможете тянуть свое изображение :)

person Toni    schedule 23.01.2020

Если вы запустите gcloud auth configure-docker, информация об авторизации сохраняется в вашем личном каталоге. Когда вы затем запускаете sudo docker pull example.io/docker-dev/name:v01, он ищет информацию об авторизации в корневом каталоге и ничего там не находит.

Вы должны запускать как с sudo, так и без него.

person Lukasz    schedule 24.01.2020