如何“docker 登录”到 OpenShift Docker 注册表

How to `docker login` to OpenShift Docker registry

我正在使用部署在 Azure 中的 Redhat OpenShift 4.4.17。

我以管理员身份登录到 OpenShift。

我在本地有一个 Docker 图像,现在我需要将我的 docker 图像推送到 OpenShift Docker 注册表。

我正在使用以下命令

docker login -u <user_name> -p `oc whoami -t` image-registry.openshift-image-registry.svc:5000

我得到的错误是:

Error response from daemon: Get https://image-registry.openshift-image-registry.svc:5000/v2/: dial tcp: lookup image-registry.openshift-image-registry.svc: no such host"

我该如何解决这个问题?

请看这个:

$ oc get route -n openshift-image-registry

 NAME                HOST/PORT                                              

默认路由 default-route-openshift-image-registry。

路径服务端口终止通配符

       image-registry   <all>     reencrypt     None

image-registry.openshift-image-registry.svc:5000 无法在 Openshift 集群外部解析,因为它是内部注册表服务名称。 因此,您应该通过注册表的 Route 主机名访问内部注册表服务,以便执行 docker login。如果未公开内部注册表,请参考 Exposing a secure registry manually

// expose the internal registry to external using Route.
$ oc patch configs.imageregistry.operator.openshift.io/cluster --patch '{"spec":{"defaultRoute":true}}' --type=merge

// Verify the internal registry Route hostname.
$ oc get route -n openshift-image-registry
NAME            HOST/PORT                                                            PATH   SERVICES         PORT    TERMINATION   WILDCARD
default-route   default-route-openshift-image-registry.apps.clustername.basedomain            image-registry   <all>   reencrypt     None

// Try to login using the internal registry Route hostname.
$ docker login -u <user_name> -p $(oc whoami -t) default-route-openshift-image-registry.apps.clustername.basedomain

这是我使用podman的测试证据如下。 首先,您应该在执行 docker 或 podman 客户端的客户端主机上放置和更新路由器通配符证书的可信 CA。

# podman login  -u admin -p $(oc whoami -t) default-route-openshift-image-registry.apps.<clustername>.<basedomain>
Login Succeeded!

此外,如果您遇到“x509:未知授权机构签署的证书”错误消息,那么您应该将路由器信任的 CA 放在您的主机上,或者在 podman 案例中应该使用“--tls-verify=false”或 docker 案例的相同选项而不是那个。

# podman login  -u admin -p $(oc whoami -t) default-route-openshift-image-registry.apps.<clustername>.<basedomain>
Error: error authenticating creds for "default-route-openshift-image-registry.apps.<clustername>.<basedomain>": pinging docker registry returned: Get https://default-route-openshift-image-registry.apps.<clustername>.<basedomain>/v2/: x509: certificate signed by unknown authority

# podman login --tls-verify=false  -u admin -p $(oc whoami -t) default-route-openshift-image-registry.apps.<clustername>.<basedomain>
Login Succeeded!