我在线上找到了许多有关此问题的材料,但是找不到解决方案。而且其中大多数都比较老(几年),与此同时情况可能发生了很大变化。
我在 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主机设置(网络设置等),以免破坏其他情况。
答案 0 :(得分:0)
我已经为这个问题苦苦挣扎了好几天。对我有用的是:
这似乎重置了所有 HyperV 虚拟网络接口。卸载 Docker Desktop 可能不是必需的,但由于它至少依赖于这些功能中的一些,我觉得做一个完整的周期是最明智的。