无法访问本地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版本的情况一样。