【发布时间】:2017-05-11 13:50:14
【问题描述】:
这个问题与其他关于 Windows 网络以及它们如何与 Docker 容器相关的问题类似,但我似乎无法找到解决我的确切问题的方法。
我正在为新的预构建预发布的 .NET Core 1.1 应用程序设置 Docker 容器。我有一个 Dockerfile,它将应用程序构建到启用 nanoserver/.NET Core 1.1 的映像中,但我无法从 Windows 主机访问正在运行的应用程序。
使用:Docker for Windows 17.0.31-ce-win10 (11972) 在由 macOS/vmWare Fusion 8.5.1 托管的 Windows 10 Pro VM 上。
鉴于以下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 Core 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。
鉴于上述情况,我做错了什么导致 Windows VM 主机无法访问我的 Web 应用程序容器?我能够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驱动程序 -
docker network ls产生以下内容:``` NETWORK ID NAME DRIVER Scope 1c086d38347a nat nat local 3e8fc51bda59 none null local ```
标签: docker nano-server