0

Я пытаюсь нажать изображение Докера в Реестр Контейнеров Google из сборки CircleCI, согласно their instructions. Однако, выдвигая ГКЛ не удается из-за явной ошибки аутентификации:Что вызывает ошибку аутентификации при нажатии Docker на Google Container Registry?

Using 'push eu.gcr.io/realtimemusic-147914/realtimemusic-test/realtimemusic-test' for DOCKER_ARGS. 
The push refers to a repository [eu.gcr.io/realtimemusic-147914/realtimemusic-test/realtimemusic-test] (len: 1) 

Post https://eu.gcr.io/v2/realtimemusic-147914/realtimemusic-test/realtimemusic-test/blobs/uploads/: token auth attempt for registry: https://eu.gcr.io/v2/token?account=oauth2accesstoken&scope=repository%3Arealtimemusic-147914%2Frealtimemusic-test%2Frealtimemusic-test%3Apush%2Cpull&service=eu.gcr.io request failed with status: 403 Forbidden 

Я до нажатия изображение Docker подлинности учетной записи службы от Google Cloud:

echo $GCLOUD_KEY | base64 --decode > ${HOME}/client-secret.json 
gcloud auth activate-service-account --key-file ${HOME}/client-secret.json 
gcloud config set project $GCLOUD_PROJECT_ID 

Тогда я построить изображение и нажмите на GCR:

docker build -t $EXTERNAL_REGISTRY_ENDPOINT/realtimemusic-test -f docker/test/Dockerfile . 
gcloud docker push -- $EXTERNAL_REGISTRY_ENDPOINT/realtimemusic-test 

Что я здесь делаю неправильно?

+1

Еще одна проблема, которую я вижу в наших журналах, заключается в том, что проект «realtime-music-147914», похоже, не существует. – jsand

+0

@jsand Ugh да, в названии проекта я вижу трюк-мошенник: (Не уверен, что я сделал эту ошибку последовательно, хотя, выполняя еще одну сборку сейчас с исправленной проблемой. – aknuds1

+0

@jsand Я исправил имя проекта, а ошибка превратилась в 403, что, на мой взгляд, имеет смысл, поскольку указывает на ошибку разрешения, а не на плохой запрос. Я почти уверен, что вчера видел 403, поэтому дополнительная тире в названии проекта была, вероятно, прерывистой. – aknuds1

ответ

0

Учетная запись службы требует разрешения на запись в ведро Cloud Storage, содержащее реестр контейнера. Предоставление учетной записи службы либо роль редактора проекта, либо запись на запись в ведро (через ACL) решает проблему. Последнее должно быть предпочтительным, поскольку учетная запись не получает более широких разрешений, чем она требуется.

1

Вы пытались использовать метод _json_key для аутентификации с помощью Docker? https://cloud.google.com/container-registry/docs/advanced-authentication

После этого, пожалуйста, используйте голый «докер» (без «gcloud»).

+0

Как вы думаете, нужно предоставить разрешение учетной записи службы на то, чтобы нажать на реестр? Я просто не понял, как сказать, если у него есть права или нет. – aknuds1

+1

Учетная запись службы требует разрешения редактора, чтобы создать ведро GCS, которое то, что поддерживает ваш контейнерный реестр. Что вы делаете, на самом деле должно быть хорошо. Если у вас есть учетная запись службы как активная учетная запись gcloud, «gcl oud docker 'должен вводить действительный токен доступа, если учетная запись службы имеет разрешения редактора. – jsand

+0

Я думаю, что это может быть именно то, что я не дал разрешения редактора учетной записи службы. Я предполагаю, что сначала я думал, что это даст ему слишком большой контроль, поэтому я назначил ему роль Актера учетной записи службы. Кроме того, руководство CircleCI ничего не говорит о том, какую роль назначить учетной записи службы, поэтому я был не уверен. – aknuds1