Невозможно отправить образ докера в реестр GCP: отказано: обмен токенами не прошел для проекта ‹my_project_id› Доступ запрещен

При попытке отправить образ докера в Google Cloud Registry с помощью Google Cloud Cli я получаю сообщение об ошибке:

denied: обмен токенами для проекта завершился неудачно. В доступе отказано.

Я выполнил следующие шаги:

  1. Установлена ​​оболочка Google Cloud sdk
  2. Загрузил ключевой файл json для моей учетной записи IM
  3. Установите аутентификацию с помощью следующей команды:

google-cloud-sdk/bin/gcloud auth activate-service-account --key-file <path_to_json_file>

  1. Выполненная ниже команда для входа в систему:

docker login -u _json_key --password-stdin https://asia.gcr.io < path_to_json_file

  1. Создал и пометил образ докера.

  2. Пытался отправить изображение в GCR с помощью следующей команды:

docker push "asia.gcr.io/$GCLOUD_PROJECT_ID/$IMAGE_NAME:latest"

Получаю следующий результат:

The push refers to repository [asia.gcr.io/<my_project_id>/<my_image_name>]
1bd77e11e1bf: Preparing
b57c79f4a9f3: Preparing
d60e01b37e74: Preparing
e45cfbc98a50: Preparing
762d8e1a6054: Preparing

denied: Token exchange failed for project <my_project_id>. Access denied.

Примечание: 1. Мой GCR API уже включен.

  1. Версия Docker, которую я использую, - это Docker версии 18.09.2, сборка 6247962.

  2. Я использую машину Windows, на которой установлен облачный интерфейс командной строки Google. Так что все операции выполняются только от вдов.

  3. То же самое я пробовал на образе Gitlab «Docker: latest» в моем конвейере Gitlab. Ошибка одинакова в обоих местах (мой локальный компьютер с Windows и конвейер Gitlab)


person Rushikesh Mandage    schedule 23.03.2019    source источник
comment
Вы уверены, что ваш пользователь может отправлять сообщения в Реестр контейнеров Google вашего проекта? Какие роли у вас есть в вашем проекте? У вас должна быть роль roles/storage.admin, чтобы иметь возможность отправлять сообщения в GCR (проверьте документы здесь: cloud.google.com/container-registry/docs/access-control).   -  person norbjd    schedule 23.03.2019
comment
Привет, @norbjd, у меня не создано хранилище. Согласно документации, я должен сначала отправить изображение, и только тогда у меня будет ведро. В противном случае созданный мной пользователь IAM будет иметь роль storage.admin. Тем не менее я не могу нажать изображение   -  person Rushikesh Mandage    schedule 23.03.2019
comment
Создание корзин на самом деле не имеет значения :) просто GCR использует внутреннее хранилище Google Cloud Storage для хранения изображений, поэтому, чтобы иметь возможность отправлять изображения, учетные записи должны иметь roles/storage.admin роль. Но я понимаю ваше замешательство. В любом случае, если у вашего пользователя есть эта роль, проблема должна исходить откуда-то еще. Можете ли вы попробовать отправить изображение из Cloud Shell своему пользователю, чтобы проверить, не связано ли оно с вашей локальной средой?   -  person norbjd    schedule 23.03.2019


Ответы (1)


Шаг № 3 не нужен, потому что вы аутентифицируете Docker (не gcloud), чтобы использовать учетные данные учетной записи службы.

У меня это работает на экземпляре Linux (Cloud Shell); Я предполагаю, что GitLab использует Linux. Я не пробовал с машины Windows.

Я рекомендую вам убедиться, что вы имеете в виду правильную учетную запись службы, ключ, проект и т. Д. Как упоминается в комментариях, для учетной записи службы требуется> = roles/storage.admin

person DazWilkin    schedule 23.03.2019
comment
У моей учетной записи службы есть роль storage.admin. По-прежнему не повезло. - person Rushikesh Mandage; 24.03.2019