这个问题与其他关于 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 上运行良好。我可以直接发出完全相同的命令并使用Chromedotnet WebApi.dll
访问该站点。localhost:5000