我正在尝试使用以下方式连接 openshift 集群的内部 docker 注册表
/bin/docker login -u user -p password` `oc get svc -n default | grep docker-registry `:5000
收到以下消息:
Error response from daemon: Get https://VirtualIP:5000: cannotconnect
答案1
我假设您正在使用 OpenShift 版本 4。可能这甚至可能采用 CodeReady Containers(单节点 OpenShift 4 开发人员类型的环境)的形式。
OpenShift 将在以下 URL 上公开其容器注册表:
https://默认路线-openshift-image-registry.apps-crc.testing:5000/
(其中 apps-crc.testing 是您在部署中的应用程序域)。请注意,这是用于对图像存储库的外部访问;在内部,您需要引用图像(在本例中,项目“shiny”中的图像“shiny-proxy:latest”),如下所示:
图像注册表.openshift-图像注册表.svc:5000/shiny/shiny-proxy:最新
对于 CodeReady Containers,您可能会看到: https://code-ready.github.io/crc/#accessing-the-internal-openshift-registry_gsg
这也将帮助您解决证书问题(例如自签名证书)。
请特别注意您的登录方式;您不使用密码,而是使用令牌,您可以使用“oc whoami -t”获取令牌。
PS> docker login -u developer -p $(oc whoami -t) `
https://default-route-openshift-image-registry.apps-crc.testing:5000/
CodeReady 容器和“vsock”模式的特别说明
如果您使用的是“vsock”模式。您需要将端口转发到 image-registry 服务(作为 kubeadmin;开发人员用户无权访问)。此外,Docker 守护程序需要能够连接到该转发端口,而 127.0.0.1 将不起作用,因此允许从 0.0.0.0 连接端口转发(注意潜在的访问问题)并让 Docker 连接到“host.docker.internal”。
PS> oc -n openshift-image-registry port-forward service/image-registry 5000:5000 --address 0.0.0.0
您需要调整 Docker Daemon 的不安全注册表以添加 host.docker.internal:
{
"registry-mirrors": [],
"insecure-registries": [
"host.docker.internal:5000"
],
"debug": false,
"experimental": false,
"features": {
"buildkit": true
}
}
PS> docker login -u developer -p $(oc whoami -t) host.docker.internal:5000
当然,“host.docker.internal”这个名称具有误导性,让人误以为这是 OpenShift 内部注册表。让我们标记并将镜像推送到 OpenShift
PS> docker tag openshift-r-shiny:latest host.docker.internal:5000/cameron-rshiny/openshift-r-shiny:latest
docker push host.docker.internal:5000/cameron-rshiny/openshift-r-shiny:latest
核实:
PS> oc -n cameron-rshiny get is
NAME IMAGE REPOSITORY TAGS UPDATED
openshift-r-shiny default-route-openshift-image-registry.apps-crc.testing/cameron-rshiny/openshift-r-shiny latest About a minute ago
也可以看看[史诗] 守护进程 GA