无法访问Docker Nanoserver容器Web应用程序

这个问题类似于Windowsnetworking的主题,以及它们如何与Docker容器相关,但我似乎无法find解决我的确切问题的解决scheme。

我正在为一个预先构build的预先发布的.NET Core 1.1应用程序设置一个Docker容器。 我有一个Dockerfile将应用程序构build到启用了nanoserver / .NET Core 1.1的映像中,但是我无法从Windows主机访问正在运行的应用程序。

在由macOS / vmWare Fusion 8.5.1托pipe的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 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.

然后,在另一个terminal窗口中,我发出以下命令:

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 localhost:5000 172.20.76.30:80 localhost:5000

奇怪的是,但是,如果我docker run microsoft/iis我能够访问{container's IP}:80

鉴于上述情况,我做错了什么导致我的Web应用程序容器无法访问Windows VM主机? 我能够ping 172.20.76.30结果,我的容器能够ping 172.20.64.1 (其与Windows VM主机对应的网关IP),但就我已经能够确认path在两台networking主机之间。

最后,我会得出结论,观察到应用程序在Windows VM上运行得非常好。 我能够直接发出完全相同的命令dotnet WebApi.dll ,并在Chrome中使用localhost:5000访问该站点。

如果它开始工作,因为你切换到aspnetcore图像,那么它可能是一个端口映射的问题,而不是一个networking。 aspnetcore基础镜像设置ASP.NET Core环境variables,告诉Kestrel在端口80上监听,而不是绑定到localhost:5000 。 最后一个声明中的关键是localhost,除非你说否则Kestrel只适用于本地stream量。 来自您的主机的stream量不是本地的,所以它不会工作。

如果你想使用dotnet图像而不是aspnetcore ,那么你可以将ASPNETCORE_URL环境variables设置为http://+:5000或者任何你想要的端口。

编辑

目前Windows肯定有一个限制。

看起来像根据博客链接的坏消息: Docker Loop Back For Windows容器

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

找出解决scheme。 我将Dockerfile的基础镜像从FROM microsoft/dotnet:1.1-runtime-nanoserverFROM microsoft/aspnetcore:1.1.2-nanoserver并突然一切正常。

我有点惊讶这个作品,因为我可以从本地机器运行dotnet WebApi.dll没有问题,但我很高兴我find了一个图像/标签的作品!