本地私人Dockerregistry不会回应

我花了相当多的时间试图让一个群体运行起来。 实际上,使用本文提供的脚本可以轻松运行。

但是我遇到了一个问题,那就是工人和主人的形象不一样。 似乎这不应该成为一个问题,因为每个工作节点都使用--registry-mirror标志启动。

但是,当我试图debugging这个,我发现我似乎有什么根本错误的地方。 因此,在处理群registry的更复杂的内容之前,我需要能够运行一个基本的本地registry,并且在那里遇到问题。

Docker文档讨论在localhost上运行你自己的registry 。 因此,我的Docker主机上没有其他任何东西运行,并遵循该指南,我做了:

 $ docker run -d -p 5000:5000 --restart=always --name registry registry:2 

运行docker ps显示它启动得很好。 抓取最新的ubuntu图像也没有问题:

 $ docker pull ubuntu && docker tag ubuntu localhost:5000/ubuntu 

但下一步是问题出在哪里:

 $ docker push localhost:5000/ubuntu The push refers to a repository [localhost:5000/ubuntu] Get https://localhost:5000/v1/_ping: dial tcp 192.168.21.146:5000: i/o timeout 

现在我正在使用Docker for Mac(Docker版本17.03.1-ce,build c6d412e),并且已经在首选项(并重新启动)中将localhost:5000configuration为不安全的registry。 所以我很困惑,为什么a)它带来了192.168.21.146 ? (这是我的子网,但不是我的主机的地址)和b)它引用https

我想可能是DNSparsing出错了,所以我检查了/etc/hosts ,甚至在node运行这个脚本来检查:

 $ node > var x = require('dns').lookup("localhost", (err, ip) => console.log("IP = ", ip)) undefined > IP = 127.0.0.1 

所以它似乎不是一个本地主机不正确的解决scheme的问题。 如果我运行curl http://localhost:5000/v2/_catalog ,我会得到一个空的registry,这是事实进一步certificate的。 那么为什么推送失败? 但是,如果我这样做:

 $ docker pull ubuntu && docker tag ubuntu 127.0.0.1:5000/ubuntu Using default tag: latest latest: Pulling from library/ubuntu Digest: sha256:f3a61450ae43896c4332bda5e78b453f4a93179045f20c8181043b26b5e79028 Status: Image is up to date for ubuntu:latest $ docker push 127.0.0.1:5000/ubuntu The push refers to a repository [127.0.0.1:5000/ubuntu] 73e5d2de6e3e: Pushed 08f405d988e4: Pushed 511ddc11cf68: Pushed a1a54d352248: Pushed 9d3227c1793b: Pushed latest: digest: sha256:f3a61450ae43896c4332bda5e78b453f4a93179045f20c8181043b26b5e79028 size: 1357 

现在我完全困惑。 为什么127.0.0.1localhost不工作?

我还有其他关于设置本地registry的问题,并将其映射到工作节点的群集中。 但是我不认为在问我在那里的问题之前是否有任何意义,除非我至less可以通过Docker文档中的4个基本步骤 。

是否有一些我可以在这里运行的诊断程序(我还没有)找出错误的configuration? 任何帮助诊断这将不胜感激。 谢谢。

所以写完这些之后,我挖得更深了。 我看到,不知何故IP地址192.168.21.146popup。 考虑到Docker在networking方面所做的所有事情,我不能确定它是否从我的networking中获取IP。 但事实certificate,当我走进我的路由器找出什么机器是192.168.21.146 ,我不仅发现它是一台电视机,而是电视实际上注册自己在主机名localhost DNS的DNS!

看起来,Docker必须使用不同的parsing方法,而不是我的Mac上的其他任何程序,这就是为什么我抛弃了这种气味。 但是,我决定在这里继续这个职位,因为可能有其他人(例如拥有三星智能电视的人)可能遇到同样的问题。

啊。