繁体   English   中英

"为什么我无法在 Windows 上 ping docker 容器?"

[英]Why can't I ping docker container on Windows?

不要将其标记为重复,因为我查看了其他答案并没有解决我的问题。

我正在使用 Windows 7 和 docker 工具箱。

我正在做这个教程: https<\/a> :\/\/docs.microsoft.com\/en-us\/dotnet\/csharp\/tutorials\/microservices

所以在这个命令之后:

docker run -d -p 80:5000 --name hello-docker weather-microservice

这是因为,您通过docker inspect命令看到的 ip 地址被 docker 用于内部网络和通信。 从外面是无法访问的。 此外,localhost 将不起作用,因为您正在运行 docker 工具箱,它在 ubuntu VM 内运行。 您必须首先通过以下方式获取VM的IP地址,

docker-machine ls

如果我没记错的话,工具箱在 Mac 和 Windows 中的工作方式相同,IP 地址应该是 192.168.99.100。 因此,您将能够通过http://192.168.99.100访问您的应用程序。 除了这些,你为什么还在使用docker工具箱。 新的方式是 docker for mac/ docker for windows。 它更容易和有效。 首先,您将能够通过 localhost 访问您的应用程序,而无需知道 IP 地址。

实际上,我从控制面板\\网络和 Internet\\网络连接中获得了容器的 IP。 有一个名为 vEthernet(DockerNAT) 的适配器,它是容器的适配器。 我可以 ping 为这个适配器找到的 IP。

Docker 已知限制中所述

Windows 版 Docker 桌面无法将流量路由到 Linux 容器。 但是,您可以 ping Windows 容器。

因此,在尝试将容器从 Windows 主机 ping 到 Linux 容器时,请记住这一点。 您可能想使用docker runpublish功能来启用端口转发

10 次中有 9 次是 Windows 防火墙。

完全禁用 Windows 防火墙 - 将其关闭 - 并查看您是否可以访问您的站点。

与 Ehsan Mirsaeedi 所说的类似,但对我而言,vEthernet(默认交换机)才是正确的选择。 还发布了一个带有图片的答案,在Windows docker container cannot ping host

希望这对其他人有帮助!

我偶然发现了这个问题,因为我正在寻找一种方法将我的本地 HTTP 端口(80)绑定到我的容器的 HTTP 端口,这是一个在 Windows 的 Docker Desktop 上运行的 Apache 容器 - 通过 WSL2(这很重要)

我找不到快速简便的方法来做到这一点,所以我自己想出来了。

您必须做的是将本地端口(在 Windows 上)绑定到 WSL 上的端口。

这是我的做法:

$wsl_ip = (wsl -d "docker-desktop" -- "ifconfig" "eth0" "|" "grep" "inet addr:").trim("").split(":").split()[2]
netsh interface portproxy add v4tov4 listenport=443 listenaddress=0.0.0.0 connectport=443 connectaddress=$wsl_ip
netsh interface portproxy add v4tov4 listenport=80 listenaddress=0.0.0.0 connectport=80 connectaddress=$wsl_ip

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM