我有 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/list 和 http://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)
| 归档时间: |
|
| 查看次数: |
17295 次 |
| 最近记录: |