此問題與Windows網絡主題上的其他人類似,以及它們如何與Docker容器相關,但似乎無法找到解決我的確切問題的解決方案。無法訪問Docker Nanoserver容器Web應用程序
我正在爲一個新的預生成預發佈的.NET Core 1.1應用程序設置一個Docker容器。我有一個Dockerfile,它將應用程序構建到啓用了nanoserver/.NET Core 1.1的映像中,但我無法從Windows主機訪問正在運行的應用程序。
在由macOS/vmWare Fusion 8.5.1託管的Windows 10 Pro VM上使用:Docker for Windows 17.0.31-ce-win10(11972)。
鑑於以下Dockerfile
:
FROM microsoft/dotnet:1.1-runtime-nanoserver WORKDIR \app COPY \out . EXPOSE 80 EXPOSE 5000 ENTRYPOINT ["dotnet", "WebApi.dll"]
如果我使用命令docker run {image} -P 5000:5000
我得到下面的輸出(從.NET 1.1核心的Hello World應用程序):
Hosting environment: Production Content root path: C:\app Now listening on: http://localhost:5000 Application started. Press Ctrl+C to shut down.
然後,在另一個終端窗口中,我發出以下命令:
docker inspect {container-name}
在那裏我得到這個顯着的輸出:
"Networks": { "nat": { "IPAMConfig": null, "Links": null, "Aliases": null, "NetworkID": "246469d0fe2936d87c5a923 "EndpointID": "2401e38f20539ac9fe562e "Gateway": "172.20.64.1", "IPAddress": "172.20.76.30", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "00:15:5d:33:3e:7a" } }
我不能使用以下位置來訪問Web應用程序:
localhost:5000
,172.20.76.30:80
,172.20.76.30:5000
然而奇怪的是,如果我docker run microsoft/iis
我可以訪問{container's IP}:80
。
鑑於上述情況,我做錯了什麼導致我的Web應用程序容器無法訪問Windows VM主機?我能夠得到ping 172.20.76.30
的結果,而且我的容器能夠以ping 172.20.64.1
(它的網關IP與Windows VM主機相對應),但就我已經能夠確認兩臺網絡主機之間的路徑而言,這是可行的。
最後,我會以觀察到的結果得出結論:應用程序在Windows VM上運行得非常好。我可以直接發佈完全相同的命令dotnet WebApi.dll
,並在Chrome中使用localhost:5000
訪問該網站。
「nat」網絡使用什麼驅動程序?橋?主辦?空值? –
nat網絡作爲內部網絡在Hyper-V中設置。請讓我知道,如果你正在尋找比這更詳細的信息(以及我可以找到它的地方)。感謝您的詢問! –
好吧,docker虛擬局域網應該是內部的。如果你從終端執行'docker network ls'命令並查看你的「nat」網絡名稱下列出了哪個驅動程序。我相信你想被使用'bridge'司機 –