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

pet*_*erk 4 ubuntu docker

我有 2 台机器运行 dockerd。一个安装了 docker 版本 18.06.1-ce 的 Ubunto.18.04 盒子,我想将其用作不安全的测试注册表/存储库服务器,我使用它的唯一方法是使用连接到端口 5000 的 SSH 隧道。

另一个是开发工作站,一个 Windows 10“pro”盒子,它还有一个本地 docker 实例(docker for Windows 版本 18.06.1-ce)作为服务在其上运行,我用它来构建测试映像。

到目前为止,我无法让 Windows 盒子通过隧道推入或拉出 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"]}
Run Code Online (Sandbox Code Playgroud)

此时一切似乎都很好。如果我删除 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
Run Code Online (Sandbox Code Playgroud)

我还尝试使用带有 URL 的浏览器(此处没有curl):

http://Dev2:5000/v2/testapp/tags/listhttp://localhost:5000/v2/testapp/tags/list

我得到了两者: {"name":"testapp","tags":["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)
Run Code Online (Sandbox Code Playgroud)

超时时间至少为 30 秒。注意:如果我从另一个运行 docker 的 Unix 机器上做同样的事情,一切都会正常工作,所以这对于在 Windows 10 上运行的 docker for Windows 来说是特有的。由于某种原因,这会失败。

我一直没能解决这个问题。两台机器上的链中都没有 HTTP 代理。它位于本地子网上。服务器上的所有其他服务都可以访问,等等。 UI 中的 Windows docker 中的“不安全注册表”是为主机和端口设置的。

这是一个错误吗?在 Windows 10 中?它在另一个 Ubuntu 盒子上工作得很好。

bog*_*ata 12

万一有人仍然遇到这个问题。我遇到了同样的问题。我能够通过转到daemon.json并禁用实验功能来“修复”它。这是我的 json 配置:

{
  "insecure-registries": [
    "localhost:5000"
  ],
  "debug": true,
  "experimental": false,
  "registry-mirrors": []
}
Run Code Online (Sandbox Code Playgroud)