docker - GKE:Docker登录始终成功,但是即使使用有效的凭证,推送也无法正常工作

标签 docker oauth-2.0 kubernetes google-kubernetes-engine docker-registry

我有一个在GCE中运行的GKE集群,我能够构建并标记从ubuntu:16.04派生的图像:

/ # docker images
REPOSITORY                          TAG                 IMAGE ID            
CREATED             SIZE
eu.gcr.io/my-project/ubuntu-gcloud   latest              a723e43228ae        7 minutes ago       347MB
ubuntu                              16.04               ebcd9d4fca80        7 days ago          118MB

首先,我尝试登录到注册表(如GKE文档中所述) docker login -u oauth2accesstoken -p `curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google"|awk -F\" "{ print \$4 }"` eu.gcr.io`
然后docker push命令失败:
# docker push eu.gcr.io/my-project/ubuntu-gcloud
The push refers to a repository [eu.gcr.io/my-project/ubuntu-gcloud]
a3a6893ab23f: Preparing
6e390fa7d62c: Preparing
22b8fccbaf84: Preparing
085eeae7a10b: Preparing
b29983dd2306: Preparing
33f1a94ed7fc: Waiting
b27287a6dbce: Waiting
47c2386f248c: Waiting
2be95f0d8a0c: Waiting
2df9b8def18a: Waiting
denied: Unable to create the repository, please check that you have access to do so.

token 应该是有效的,在另一个实例中,我可以用它进行gcloud whatever;服务帐户在项目上具有“编辑者”角色。

最奇怪的部分是当我使用明显无效的凭据执行docker login
misko@MacBook ~ $ docker login -u oauth2accesstoken -p somethingverystupidthatisreallynotmypasswordortoken123 eu.gcr.io
Login Succeeded

登录始终成功。

我应该怎么做才能将docker push成功发送到gcr.io?

最佳答案

试试这个:

gcloud docker -- push eu.gcr.io/my-project/ubuntu-gcloud

如果要使用常规docker命令,请使用GCR凭据更新docker配置:
gcloud docker -a

然后,您可以像这样构建和推送docker镜像:
docker build -t eu.gcr.io/my-project/ubuntu-gcloud .
docker push eu.gcr.io/my-project/ubuntu-gcloud

关于docker - GKE:Docker登录始终成功,但是即使使用有效的凭证,推送也无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44121518/

相关文章:

oauth-2.0 - 如何在 GSuite 中创建仅供内部使用的 OAuth 2.0 应用程序?

kubernetes - 由于节点亲和性和 pod 亲和性,无法部署更新 Deployment

json - kubernetes 上的 Keycloak 和使用 log4j2 记录 json 布局格式

django - Django无法连接到gitlab ci中的postgres数据库

git - 修复 git diff-files 列出 docker 中的所有文件

Docker Compose 在 v2 中注入(inject)链接容器

kubernetes - 如何使用 terraform 限制 kubernetes 集群上的磁盘使用

docker - 在Docker中运行命令

django - 收到 InvalidClientIdError (invalid_request) 不匹配的重定向 URI。使用 requests_oauthlib

oauth-2.0 - Spring security oauth 2 和客户端凭证流程