为什么标签似乎与注册表的主机名紧密耦合?

Why does the tag appear to be tightly coupled to hostname of the registry?

我已经阅读了很多关于如何设置和使用我自己的私有 docker 注册表的教程。

让我难过的一件事是,我用来标记图像的标签似乎与注册表的主机名紧密相关。

docker tag <imageid> registry.mycompany.com:5000/myrepo:tag
docker push registry.mycompany.com:5000/myrepo:tag

这看起来确实有悖常理。如果注册表必须移动到不同的主机名会怎样?或者,如果我使用不同的主机名,无论我是否正在访问服务器 internally/externally?

对我来说更直观的是在 pushing/pulling:

时指定注册表
docker tag <imageid> myrepo:tag
docker push myrepo:tag --registry=registry.mycompany.com
docker pull myrepo:tag --registry=registry.mycompnay.com

这样做的理由是什么?我错过了什么关键信息?

the tag I'm tagging the image with, appears to be tightly coupled to the hostname of the registry.

不完全是:注册表用于 url 用于 pushing/pulling 图像的注册表服务器。

即使您更换了服务器,您用于 push/pull 的图像名称仍然相同,只是 url 发生了变化(如 library/registry and docker/docker-registry 中所述)。

URL/registry 名称本质上是图像的 "namespace"。如果您不指定注册表,则假定图像属于 Docker Hub。实际上,这意味着 Docker Inc 控制了全局命名空间。

如果不这样做,您可能会在不同的主机上拥有两个完全不同的 "pushed" 同名图像,这是 Docker 想要避免的。

注册表服务器的移动是一个合理的问题,因此我建议您尝试使用域名而不是 IP 来注册您的注册表。