将 Docker 图像推送到 Google Container Registry 时导致身份验证错误的原因是什么?
What's causing authentication error when pushing Docker image to Google Container Registry?
我正在尝试根据 their instructions 从 CircleCI 构建将 Docker 图像推送到 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 云验证了服务帐户:
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
我做错了什么?
您是否尝试过使用 _json_key 方法与 Docker 进行身份验证?
https://cloud.google.com/container-registry/docs/advanced-authentication
之后,请使用裸'docker'(没有'gcloud')。
服务帐户需要写入包含容器注册表的 Cloud Storage 存储桶的权限。授予服务帐户项目编辑者角色或对存储桶的写入权限(通过 ACL)可解决问题。后者应该更可取,因为该帐户没有获得比它需要的更广泛的权限。
如果您使用 google cloud sdk 推送 docker 图片。您可以通过以下命令使用临时授权:
gcloud docker --authorize-only
以上命令为您提供了使用 docker 推送和拉取图像的临时授权。
您可以参考此 link 了解详细信息 Gcloud docker。
希望对解决您的问题有所帮助。
多次重试后...我使用访问令牌解决了问题:
gcloud auth print-access-token | docker login -u oauth2accesstoken --password-stdin https://[HOSTNAME]
我正在尝试根据 their instructions 从 CircleCI 构建将 Docker 图像推送到 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 云验证了服务帐户:
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
我做错了什么?
您是否尝试过使用 _json_key 方法与 Docker 进行身份验证? https://cloud.google.com/container-registry/docs/advanced-authentication
之后,请使用裸'docker'(没有'gcloud')。
服务帐户需要写入包含容器注册表的 Cloud Storage 存储桶的权限。授予服务帐户项目编辑者角色或对存储桶的写入权限(通过 ACL)可解决问题。后者应该更可取,因为该帐户没有获得比它需要的更广泛的权限。
如果您使用 google cloud sdk 推送 docker 图片。您可以通过以下命令使用临时授权:
gcloud docker --authorize-only
以上命令为您提供了使用 docker 推送和拉取图像的临时授权。 您可以参考此 link 了解详细信息 Gcloud docker。 希望对解决您的问题有所帮助。
多次重试后...我使用访问令牌解决了问题:
gcloud auth print-access-token | docker login -u oauth2accesstoken --password-stdin https://[HOSTNAME]