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的情况下运行,一切都按预期工作.
看看我的答案: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)
| 归档时间: |
|
| 查看次数: |
2124 次 |
| 最近记录: |