如何从 Windows 10 计算机上的 Windows docker 访问 docker 不安全注册表?

问题描述 投票:0回答:1

我有 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/listhttp://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 盒子上运行得很好。

docker ubuntu
1个回答
12
投票

我也遇到了同样的问题。我可以通过转到

daemon.json
并禁用实验功能来“修复”它。这是我的 json 配置:

{
  "insecure-registries": [
    "localhost:5000"
  ],
  "debug": true,
  "experimental": false,
  "registry-mirrors": []
}
© www.soinside.com 2019 - 2024. All rights reserved.