首页 > 解决方案 > Openshift - 使用服务帐户登录 docker 注册表

问题描述

我目前正在尝试使用项目默认服务帐户“builder”登录到我的项目 Openshift docker 注册表,然后将图像推送到它。

使用 oc cli 登录成功,但是当我尝试登录 docker 注册表时:

docker login -u $(oc whoami) -p $(oc whoami --show-token) registry.pro-eu-west-1.openshift.com:443

我面临:

Error response from daemon: Get https://registry.pro-eu-west-1.openshift.com:443/v2/: unauthorized: authentication required

构建器服务帐户似乎没有登录 Openshifts docker 注册表的权限,尽管它具有system:image-builder具有描述的角色:

Grants the rights to build, push and pull images from within a project.
...

有什么想法可能会出错吗?

标签: openshiftdocker-registry

解决方案


虽然我不知道为什么docker login不能按您期望的方式工作,但您可以使用以下命令使您的本地 docker 以当前oc用户身份登录到集群注册表:

oc registry login

如果您想以 ServiceAccount 身份登录,例如builder(如果这不是您使用 using 登录的用户,oc则可以使用该-z选项(假设您在 ServiceAccount 所在的项目中):

oc registry login -z builder

还要记住,在集群中,builderServiceAccount 可以使用名为builder-dockercfg-zftv4.


如果您仍然想要/需要使用oc登录以外的其他东西(例如使用某些不处理的工具~/.docker/config.json),那么要作为服务帐户登录,您需要将用户名更改为完全合格的 ServiceAccount名称,但用连字符替换冒号。

例如,如果您有一个名为 ServiceAccount 的项目my-projectbuilder那么 Kubernetes 中的完全限定名称将是:

system:serviceaccount:my-project:builder

但作为 OpenShift 中集群内注册表的注册表用户名,它将是:

system-serviceaccount-my-project-builder

推荐阅读