簡體   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