首页 文章

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

提问于
浏览
3

这个问题类似于其他关于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主机对应)但是_2926659已经能够确认两个网络主机之间的路径 .

最后,我能够直接发出完全相同的命令 dotnet WebApi.dll 并在Chrome中使用 localhost:5000 访问该网站 .

3 回答

  • 0

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

    如果由于某种原因想要使用 dotnet 图像而不是 aspnetcore 图像,那么可以将 ASPNETCORE_URL 环境变量设置为类似 http://+:5000 或所需的任何端口 .

  • 0

    编辑

    Windows目前肯定有限制 .

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

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

  • 2

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

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

相关问题