0

我正在尝试按照他们的说明将 Docker 映像从 CircleCI 构建推送到 Google Container Registry 。但是,由于明显的身份验证错误,推送到 GCR 失败:

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

我在这里做错了什么?

4

4 回答 4

1

您是否尝试过使用 _json_key 方法对 Docker 进行身份验证? https://cloud.google.com/container-registry/docs/advanced-authentication

之后,请使用裸 'docker'(不带 'gcloud')。

于 2016-11-01T15:28:11.507 回答
1

如果您使用 google cloud sdk 推送 docker 映像。您可以使用以下命令使用临时授权:

  gcloud docker --authorize-only

上述命令为您提供了使用 docker 推送和拉取图像的临时授权。您可以参考此链接了解详细信息Gcloud docker。希望它有助于解决您的问题。

于 2018-09-19T11:18:07.987 回答
1

经过多次重试......我使用访问令牌解决了:

gcloud auth print-access-token | docker login -u oauth2accesstoken --password-stdin https://[HOSTNAME]
于 2018-12-28T21:15:55.127 回答
0

服务帐号需要写入包含容器注册表的 Cloud Storage 存储分区的权限。授予服务帐户项目编辑角色或对存储桶的写入权限(通过 ACL)可以解决问题。后者应该更可取,因为该帐户没有获得比它需要的更广泛的权限。

于 2016-11-04T00:14:37.557 回答