更新了 windows docker 现在它在 localhost 之外不起作用

Updated windows docker and now it doesn't work outside localhost

我运行使用媒体集群已经有一段时间了,没有任何问题。我将所有东西都联网到两个不同的 docker 网络中...第一个网络只是将 docker 实例桥接到本地机器,第二个网络是一个 docker VPN 容器,我用于其他媒体服务(我正在处理的早期版本可以在这里找到:https://github.com/Xander-Rudolph/MediaDocker

st运行最重要的事情发生在今天。我 运行 docker windows 更新现在 docker 假脱机没有任何错误或问题,但是 none 服务在机器外工作 运行宁 docker。通常我会查看我的路由器中的几个服务(即桥上的 wordpress/joomla),它们在我的本地网络之外工作,但其中 none 已经工作了。我能够确认它不是 DNS A 记录,因为我能够使用我为路由器映射的 RDP 端口,当我在同一网络中的另一台机器上测试时,它无法通过内部访问服务IP(但它可以 RDP)。

有人知道可以改变什么来打破这个吗?我已经更新了我所有的 docker 图像,甚至重建了我的 VPN 容器(在我意识到这是一个网络问题之前)。我可以采取哪些步骤来尝试解决 docker 中出现的问题以防止在本地主机之外进行访问?

更新

我已经能够排除 docker 更新是根本原因...我在我的笔记本电脑上升级了 docker(之前 运行 使用相同的版本作为我的桌面)并且它没有相同的问题...必须将此配置本地化到此桌面...不知道问题是什么...将尝试在桌面上使用 linux VM 而不是 docker 对于 windows...

更新 2

在 VM 和 WSL 中进行了大量操作之后,我仍然只能从本地主机访问 docker 服务,但不能访问我网络上的另一台机器或通过 IP主机(可能与此类似:)。 RDP 确实可以工作,因此可以访问计算机,但不能访问服务。

我不确定这是 docker 网络配置还是 windows 网络配置的结果(我使用的 WSL docker 安装在 ubuntu 20.08) 但我没有看到任何突出的东西。我要删除 docker windows 的标签,但这绝对是网络问题,我怀疑这与容器 运行ning 后面的事实有关VPN...虽然我不知道为什么我可以在本地主机上访问它们,但不能访问另一个 VM 上的 IP...

当我运行

netstat -a -o

在 WSL 上,我可以看到本地主机上已建立的端口... EX:

tcp        0      0 localhost:7878          localhost:37520         ESTABLISHED

但是当我查看主机(对于 wsl)时,我没有看到连接。我尝试使用 netsh 创建防火墙规则以查看是否有帮助:

netsh advfirewall firewall add rule name="TCP Port 7878" dir=in localport=7878 protocol=TCP action=allow

但是没有任何效果。

任何有关跟踪网络以查看 where/how 其 failing/getting 被阻止的方法的建议都将非常有帮助。

您的问题:“...我可以采取哪些步骤来尝试解决 docker 中出现的问题以防止在本地主机之外访问?..."

为您提供故障排除帮助,首先您的主机上是否有多个网络适配器(以太网、Wi-Fi 等)。首先确保,这些适配器的优先级需要以正确的顺序配置,这样 Windows 网络堆栈才能正确选择网关路由。

现在,要解决此问题,请将您的主要联网网络适配器设置为具有最低的 InterfaceMetric 值,用户可以从提升的控制台使用这些 Powershell 命令:

Get-NetIPInterface -AddressFamily IPv4 | Sort-Object -Property InterfaceMetric -Descending

请确保主机的主要联网网络适配器具有最低的 InterfaceMetric 值。

// Use this command to make the change for e.g. lets say your 
// primary adapter InterfaceAlias is 'Wi-Fi'
Set-NetIPInterface -InterfaceAlias 'Wi-Fi' -InterfaceMetric 3

现在第二步,如果你主机的主要网络适配器是bridged因为你在 Hyper-V 中设置了外部虚拟交换机,那么你将设置外部具有最低 InterfaceMetric 值的虚拟交换机。

最后,confirm/verify 你的路由表,当你 运行 这个时,最后一行应该显示主适配器的网关地址及其 ifMetric 值):

Get-NetRoute -AddressFamily IPv4

如果您使用的是 Docker Toolbox,那么您使用 docker run -p 发布的任何端口都将在 Toolbox VM 的私有 IP 地址上发布。

docker-machine ip告诉你。

经常

192.168.99.100

取自:https://forums.docker.com/t/cant-connect-to-container-on-localhost-with-port-mapping/52716/25

使用下面的参考资料进行了多次尝试后,我仍然一无所获。 @derple 的推荐并没有让我到任何地方(因为我在 wsl)但是他链接某人的文章说他们切换到 linux 并卸载并重新安装 docker 桌面......对于一些愚蠢的理由。

这些是我修复它的确切步骤:

  1. 卸载docker桌面
  2. 在 wsl 的 ubuntu18.04 实例中安装 WSL 和 docker
  3. 使用 localhost 在 wsl 中测试 docker(仍然只在 localhost 上工作)
  4. 使用 windows add/remove 功能卸载 WSL
  5. 重新安装docker桌面

奇怪的是,get-netipinterface 和 get-netroute 看起来与我卸载并重新安装之前完全一样,但现在一切似乎都在工作......我不知道为什么上面的工作......