无法访问本地Docker容器上的Asp.Net Core

我已经创build了一个在asp.net核心的应用程序,并创build一个dockerfile生成本地图像并运行它。

FROM microsoft/dotnet:latest COPY . /app WORKDIR /app RUN ["dotnet", "restore"] RUN ["dotnet", "build"] EXPOSE 5000/tcp ENTRYPOINT ["dotnet", "run", "--server.urls", "http://0.0.0.0:5000"] 

然后,我用下面的命令build立我的图像

 docker build -t jedidocker/first . 

然后,我用下面的命令创build了一个容器

 docker run -t -d -p 5000:5000 jedidocker/first 

但是,当我运行以下URL到我的主机浏览器

 http://localhost:5000/ 

我有一个ERR_EMPTY_RESPONSE

这是一个networking问题? 我该如何解决?

PS:我的Windows版本是10.0.10586

我有同样的问题,并find了解决办法。 您将需要更改默认侦听主机名。 默认情况下,应用程序将监听本地主机,忽略来自容器外部的任何传入请求。 在program.cs更改您的代码以侦听所有来电:

 public class Program { public static void Main(string[] args) { var host = new WebHostBuilder() .UseKestrel() .UseContentRoot(Directory.GetCurrentDirectory()) .UseUrls("http://*:5000") .UseIISIntegration() .UseStartup<Startup>() .Build(); host.Run(); } } 

更多信息:

https://medium.com/trafi-tech-beat/running-net-core-on-docker-c438889eb5a#.hwhoak2c0

确保您正在运行带有端口绑定的-p标志的容器。

 docker run -p 5000:5000 <containerid> 

在写这篇文章时,似乎是这样的

 EXPOSE 5000:5000 

命令与-p命令的效果不同。 我还没有用-P(大写)取得真正的成功。

编辑8/28/2016:

有一件事要注意。 如果使用docker与-d(分离)模式组合,那么dotnet run命令启动服务器可能需要一些时间。 在完成执行命令(以及之前的任何其他命令)之前,您将在Chrome收到ERR_EMPTY_RESPONSE

只需更新您的入口点如下,不需要更改代码:

 ENTRYPOINT ["dotnet", "run", "--server.urls", "http://*:5000"] 

Windows Server 2016上的默认Dockernetworking是NAT,因此您可能需要使用可以通过docker inspect <container name/ID>find的IP。 不知道这是否与其他Windows版本的情况一样。