我已经在vm中设置了一个码头注册服务器。服务器具有一个由CA签名的ssl证书,该CA位于我的windows可信根证书中。
为了访问注册表,我创建了一个ssh隧道,将本地端口5000转发到针对本地主机的vm :5000。如果我用浏览器在我的机器上打开https://localhost:5000,一切都会正常。证书被认为是有效的。
在vm上的shell中,docker登录非常正常。它要我的证件并把它们储存起来。我能够按预期的方式将图像推入注册表。
每当我试图从通过隧道连接的开发人员计算机登录时,我的本地码头似乎忽略了任何SSL:
C:\WINDOWS\system32>docker login https://localhost:5000
Username: ******
Password: ******
Error response from daemon: Get http://localhost:5000/v2/: dial tcp 127.0.0.1:5000: connect: connection refuseddocker登录似乎使用HTTP而不是HTTPS,这是它应该做的。我搞不懂,如何强制码头登录使用SSL。
任何建议都将不胜感激!
干杯,
科雷戈特
发布于 2018-12-05 08:18:23
好吧我想明白了。
docker login localhost上的tl;dr引用运行守护进程的moby和,而不是windows-system。
由于我们被迫使用windows 10作为操作系统,所以docker通过hyper-v / virtualbox / hypervisor使用moby来运行“本地”停靠守护进程。因此,当我在windows中键入docker login localhost:5000时,命令不是由我的机器运行,而是由驻留在vm中的守护进程运行。在这种情况下,"localhost“并不会重新显示到我的dev-system,而是会重新显示运行守护进程的vm。
为了解决这个问题,我不得不:
docker login hostname:5000 (其中hostname是vm可以解析和访问的开发机器的名称。您可以使用命令行中的hostname命令找到它。)现在SSL、auth、push和push似乎如预期的那样工作。非常奇怪的错误行为,但这有点道理,因为没有运行witihn的注册表服务器-守护进程-vm。
我希望这篇文章能为别人节省一些时间。
干杯,
科雷戈特
https://stackoverflow.com/questions/53617151
复制相似问题