使用Windows的Docker从主机到Linux容器的连接被拒绝

时间:2020-06-06 08:39:03

标签: windows docker

我在线上找到了许多有关此问题的材料,但是找不到解决方案。而且其中大多数都比较老(几年),与此同时情况可能发生了很大变化。

我在 Windows计算机上运行了 Docker Desktop Community v 2.3.0.3 ,并在一个带有 Ubuntu Rails的简单容器中运行应用在内部的 localhost:5000 上运行。

该容器通过以下方式运行:

docker run -p 5000:5000 rails:6.0.3 foreman start

我想通过浏览器从Windows主机连接到Rails应用,但是连接被拒绝。

服务器已启动并正在运行:

> docker exec 3c167e206f60 wget localhost:5000
--2020-06-06 08:21:26--  http://localhost:5000/
Resolving localhost (localhost)... ::1, 127.0.0.1
Connecting to localhost (localhost)|::1|:5000... connected.
HTTP request sent, awaiting response... 200 OK

端口转发似乎无法正常工作(从WSL运行,但类似地从Windows通过Chrome运行):

> wget localhost:5000
--2020-06-06 10:22:50--  http://localhost:5000/
Resolving localhost (localhost)... 127.0.0.1
Connecting to localhost (localhost)|127.0.0.1|:5000... failed: Connection refused.

在使用容器地址而不是本地主机时,它也不起作用:

> docker inspect --format '{{ .NetworkSettings.IPAddress }}' 3c167e206f60
172.17.0.2
> wget 172.17.0.2:5000
--2020-06-06 10:29:02--  http://172.17.0.2:5000/
Connecting to 172.17.0.2:5000... failed: Resource temporarily unavailable.

(也可能是预期的),在 ifconfig (来自WSL)或 ipconfig (来自Windows)中,我没有看到任何与Docker相关的条目。

我还尝试了docker run --net host参数,该参数也无济于事。

理想情况下,我希望解决方案不需要我修改Windows主机设置(网络设置等),以免破坏其他情况。

1 个答案:

答案 0 :(得分:0)

我已经为这个问题苦苦挣扎了好几天。对我有用的是:

  1. 卸载 Docker 桌面
  2. 通过“打开和关闭 Windows 功能”控制面板模块关闭 Hyper-V、虚拟机平台和 Windows 管理程序平台
  3. 重启
  4. 开启 #2 中的所有功能
  5. 重新安装 Docker 桌面

这似乎重置了所有 HyperV 虚拟网络接口。卸载 Docker Desktop 可能不是必需的,但由于它至少依赖于这些功能中的一些,我觉得做一个完整的周期是最明智的。