无法从docker运行asp.net 5

soc*_*man 6 c# linux asp.net docker asp.net-core

我遵循了以下指南:使用Docker在Linux容器中运行ASP.NET 5应用程序,我无法在Windows PC或Linux服务器上运行它.我的dockerfile如下所示:

FROM microsoft/aspnet

COPY . /app
WORKDIR /app
RUN ["dnu", "restore"]

EXPOSE 5000/tcp
ENTRYPOINT ["dnx", "-p", "project.json", "web"]
Run Code Online (Sandbox Code Playgroud)

然后我跑了docker build -t myapp .然后docker run -d -p 80:5000 myapp它说它正在运行但我无法在浏览器中打开网站.我知道在Windows上你应该找到实际虚拟机运行的ip地址,通过使用docker-machine ip default最终成为现实,192.168.99.100但是当我导航到http://192.168.99.100我时,我只得到通用的"此网页不可用"错误消息.我也试过这个泊坞窗运行命令的不同变化,比如docker run -it -p 80:5000 myapp,docker run -p 80:5000 myapp和我也尝试过不同的端口,比如docker run -d -p 5000:5000 myapp但似乎没有任何工作.

我在我的Windows机器和我的linux服务器上都试过这个,但它们都不起作用.

我能够在dnx web没有docker的情况下运行,一切都按预期工作.

arm*_*oon 6

看看我的答案:Docker中的ASP.NET 5.0 beta 8无法启动

本质上,Docker在0.0.0.0网络接口上将请求转发到您的容器,但Kestrel localhost默认只监听.

所以,是的,请求被传递到您的docker容器,但Kestrel Web服务器不接受它们.因此,您需要覆盖server.urls其他人发布的属性:

ENTRYPOINT ["dnx", "web", "--server.urls", "http://0.0.0.0:5000"]
Run Code Online (Sandbox Code Playgroud)

你应该看到:

Now listening on: http://0.0.0.0:5000
Run Code Online (Sandbox Code Playgroud)

在运行容器时.您还可以执行快速docker ps命令来验证0.0.0.0实际上是Docker转发请求的网络接口.

我还写了一些关于如何让Windows 5在Windows上运行Docker的问题 - 由于Docker不仅要将请求转发到容器,因此我们必须让VirtualBox将请求传递给Docker.虚拟机boot2docker(通常default在Virtual Box中调用),然后Docker可以将它们移交给我们的容器.

帖子在这里:http://dotnetliberty.com/index.php/2015/10/25/asp-net-5-running-in-docker-on-windows/


小智 3

为了更全面地了解您的应用程序环境,请发布您的project.json 文件和您正在使用的 ASP.net 测试版。

现在,您可以尝试通过从 ENTRYPOINT 指令中取出“project.json”和“-p”参数来清理 Dockerfile,从 EXPOSE 命令中删除 tcp,最后在ENTRYPOINT 指令,以便它使用 0.0.0.0 而不是默认的 localhost,如下所示:

FROM microsoft/aspnet

COPY . /project        
WORKDIR /project       
RUN ["dnu", "restore"]

EXPOSE 5000

ENTRYPOINT ["dnx", "web", "--server.urls"]
Run Code Online (Sandbox Code Playgroud)

或者,您可以尝试完全删除 EXPOSE 命令并在 ENTRYPOINT 指令中公开 docker 端口 5000,如下所示:

FROM microsoft/aspnet

COPY . /project        
WORKDIR /project       
RUN ["dnu", "restore"]

ENTRYPOINT ["dnx", "web", "--server.urls", "http://0.0.0.0:500"]
Run Code Online (Sandbox Code Playgroud)

无论哪种方式,您都可以构建容器并使用如下所示的方式运行它:

$ docker run -it -p 80:5000 myapp
Run Code Online (Sandbox Code Playgroud)