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

时间:2017-05-11 13:50:14

标签: docker nano-server

这个问题类似于其他关于Windows网络主题的问题以及它们与Docker容器的关系,但我似乎无法找到解决我确切问题的方法。

我正在为新的预构建预发布的.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 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:5000172.20.76.30:80172.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主机相对应),但就我而言#39}已经能够确认两个网络主机之间的路径。

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

修改

目前对Windows有一定的限制。

根据博客链接看似坏消息:Docker Loop Back For Windows Containers

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

答案 2 :(得分:0)

找出解决方案。我将Dockerfile的基本图片从FROM microsoft/dotnet:1.1-runtime-nanoserver换成FROM microsoft/aspnetcore:1.1.2-nanoserver,然后突然一切正常。

我有点意外,因为我可以毫无问题地从我的本地机器运行dotnet WebApi.dll,但我很高兴我发现了一个有效的图像/标签!