3

这个问题与其他关于 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

4

3 回答 3

2

如果它开始工作是因为您切换到aspnetcore映像,那么它可能是端口映射问题,而不是网络问题。aspnetcore 基础映像设置 ASP.NET Core 环境变量,告诉 Kestrel 侦听端口 80,而不是绑定到localhost:5000. 最后一条语句中的关键是 localhost,除非您另有说明,否则 Kestrel 仅适用于本地流量。来自您主机的流量不是本地流量,因此它不会起作用。

如果您出于某种原因想使用dotnet图像而不是图像,那么您可以将环境变量设置为类似或任何您想要的端口。aspnetcoreASPNETCORE_URLhttp://+:5000

于 2017-05-18T23:51:46.183 回答
0

编辑

Windows 目前肯定有一个限制。

根据博客链接看起来是个坏消息:Docker Loop Back For Windows Containers

目前,窗口容器只能通过其虚拟 IP 地址访问。尚不支持环回访问。

于 2017-05-11T16:04:11.827 回答
0

想出了解决办法。我将基础图像换成了Dockerfilefrom FROM microsoft/dotnet:1.1-runtime-nanoserverto FROM microsoft/aspnetcore:1.1.2-nanoserver,突然一切都正常了。

我有点惊讶这项工作,因为我可以dotnet WebApi.dll毫无问题地从我的本地计算机运行,但我很高兴我找到了一个有效的图像/标签!

于 2017-05-13T03:26:58.593 回答