我有 2 台机器运行 dockerd。一个安装了 docker 版本 18.06.1-ce 的 Ubunto.18.04 盒子,我想将其用作不安全的测试注册表/存储库服务器,我使用它的唯一方法是使用 SSH 隧道连接到端口 5000。
另一个是开发工作站,一个 Windows 10 'pro' 盒子,它还有一个本地 docker 实例(docker for Windows 版本 18.06.1-ce)作为服务在其上运行,我用它来构建测试映像。
到目前为止,我无法通过隧道将 Windows 盒子推送到 Ubuntu 盒子或从 Ubuntu 盒子拉出。
两个 dockerd 都在运行。我在工作站上添加了不安全的注册表设置(通过 docker GUI,我找不到
daemon.json
文件,因此假设它位于 Windows 注册表或隐藏位置?)
我添加了 localhost:5000 来测试是否使用 SSHE 隧道,并添加
Dev2:5000
(此测试临时在内部子网上打开了端口 5000)来测试没有隧道的直接连接,然后重新启动了 docker。
在注册表框中,我按照如何使用私有注册表的示例进行操作,并执行了以下操作来测试它。我以添加到“docker”组的用户身份登录到“Dev2”,该组也具有
sudo
权限。我也尝试过以root身份。
Dev2:> docker pull ubuntu:18.04
# success
Dev2:> docker tag ubuntu:18.04 localhost:5000/testapp:00.01
Dev2:> docker push localhost:5000/testapp/00.01
# success
Dev2:> docker tag ubuntu:18.04 Dev2:5000/testapp:00.02
Dev2:> docker push Dev2:5000/testapp/00.02
# success
Dev2:> docker image rm ubuntu:18.04
# success
Dev2:> docker image ls -a
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost:5000/testapp 00.01 ea4c82dcd15a 40 hours ago 85.8MB
Dev2:5000/testapp 00.02 ea4c82dcd15a 40 hours ago 85.8MB
registry 2 2e2f252f3c88 5 weeks ago 33.3MB
Dev2:> curl http://localhost:5000/v2/_catalog
{"repositories":["testapp"]}
Dev2:> curl http://localhost:5000/v2/testapp/tags/list
{"name":"testapp","tags":["00.01","00.02"]}
Dev2:> curl http://Dev2:5000/v2/_catalog
{"repositories":["testapp"]}
Dev2:> curl http://Dev2:5000/v2/testapp/tags/list
{"name":"testapp","tags":["00.01","00.02"]}
此时一切似乎都很好。如果我删除 Dev2 docker 上的映像并拉取它们,它们将从存储库中提取并重新添加到 docker 实例中。
现在我尝试将图像拉入工作站上的 docker 中。
我在Windows 10工作站(Msys GNU版本)上运行ssh隧道ssh
workstation:> ssh nyc.livingwork.com -L 5000:localhost:5000 & # this runs and the tunnel workstation
我还尝试使用带有 URL 的浏览器(此处没有卷曲):
http://Dev2:5000/v2/testapp/tags/list 和 http://localhost:5000/v2/testapp/tags/list
我两者都得到: {“名称”:“testapp”,“标签”:[“00.01”,“00.02”]}
因此可以直接访问服务器,也可以通过隧道访问服务器。
现在我尝试:
workstation:$ docker pull localhost:5000/testapp:00.01
Error response from daemon: Get http://localhost:5000/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
workstation:> docker pull Dev2:5000/testapp:00.02
Error response from daemon: Get http://Dev2:5000/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
超时时间至少为 30 秒。 注意:如果我在另一个运行 docker 的 Unix 机器上做同样的事情,一切都会正常工作,所以这对于在 Windows 10 上运行的 Windows 版 docker 来说是特有的。由于某种原因,这会失败。
我还没能解决这个问题。两台机器上的链中都没有 HTTP 代理。它位于本地子网上。服务器上的所有其他服务都可以访问,等等。UI 中的 Windows docker 中的“不安全注册表”是为主机和端口设置的。
这是一个错误吗?在 Windows 10 中?它在另一个 Ubuntu 盒子上运行得很好。
我也遇到了同样的问题。我可以通过转到
daemon.json
并禁用实验功能来“修复”它。这是我的 json 配置:
{
"insecure-registries": [
"localhost:5000"
],
"debug": true,
"experimental": false,
"registry-mirrors": []
}