当前位置: 首页 > 知识库问答 >
问题:

ASP。NET on Docker不向浏览器提供Web应用程序

黄英韶
2023-03-14

当Web应用程序在Docker中被容器化时,我无法让我的ASP. NET Web应用程序提供给我的浏览器。

我正在运行一个Mac,我已经使用Visual Studio Code创建了一个ASP. NET Web应用程序。这是一个简单的开箱即用的演示,它基于yo aspnet“空应用程序”当运行本机(在Docker之外)时,此应用程序提供Hello World!http://localhost:5000很好。换句话说,运行dnx web将启动Web服务器(Kestrel)并执行:

Hosting environment: Production 
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.

这很好。现在进入Docker。我似乎已经成功构建了一个包含web应用程序的Docker映像,当我在Docker中运行容器时,我从Kestrel获得了相同的输出。也很好,但是,我不能再加载“Hello World!”我的浏览器中的页面位于http://localhost:5000.相反,我得到了一个被拒绝的错误连接。这是相当明显的,因为由于Docker“间接”,没有任何东西可以直接服务于端口5000。换句话说,我认为有一个不正确的转发配置,或者,我认为是误解了地址。

我相信港口转运也参与了这一过程。在我的Docker文件中,我使用了一个EXPOSE 5000,我认为它允许我使用run命令将端口5000的本地使用映射到Docker容器的端口5000:

docker run -i -t -p 5000:5000 container_name

但事实并非如此http://localhost:5000(错误连接被拒绝)。所以我想到Docker几乎肯定不在localhost。我注意到Docker装货时,上面写着:

docker is configured to use the default machine with IP 192.168.99.100

所以,我想我应该试试http://192.168.99.100:5000,但再一次(令人困惑地?)<代码>错误连接被拒绝。接下来,我在这里读了一篇有趣的文章,我能够根据建议的命令进行判断

docker inspect container_name | grep IPAddress

容器已分配“IPAddress”:“172.17.0.2”

所以,我想我应该试试http://172.17.0.2:5000.现在我们可能真的有进展了,因为我得到的不是一个旋转的沙漏,而是一个超时,而不是一个被拒绝的错误连接。但仍然没有“你好,世界!”

我可能错过了什么?


共有2个答案

邹曦之
2023-03-14

除了使用http://0.0.0.0:5000您可以使用http://*.5000

ENTRYPOINT ["dnx", "web", "--server.urls", "http://*:5000"]

或者您可以将其包含在运行时环境中

"commands": {
    "kestrel": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.Kestrel --server.urls http://*:5004"
},
    "web": ......

dockerfile中的入口点可以是

ENTRYPOINT ["dnx","-p","project.json","kestrel"]
叶经略
2023-03-14

事实证明,Web应用程序可以在虚拟机的IP地址192.168.99.100中使用。172.17.0.2显然是某种转移注意力的东西。

真正的关键似乎是容器的默认“内部”IP是0.0.0.0

根据这篇文章的建议,我编辑了Dockerfile并指定了以下内容:

ENTRYPOINT ["dnx", "web", "--server.urls", "http://0.0.0.0:5000"]

因为...

这将允许我们的Web应用程序服务来自Docker提供的端口转发的请求,默认0.0.0.0

端口映射对于将主机的端口链接到容器的端口至关重要,但是EXPOSE命令显然是多余的。现在,当我跑的时候

docker run -i -t -p 80:5000 container_name

我可以简单地浏览到http://192.168.99.100(80端口是隐式的)

还有维奥拉!这是我的“你好,世界!”

 类似资料:
  • Web浏览器 web 浏览器(通常被称为浏览器)是一个用于检索、展示和遍历在万维网上的信息资源的软件应用程序. 信息资源被定义成统一资源定位符(URI/URL). 它可能是网页, 图片, 视频或者一个内容片断. 超链接的出现使用户能轻松的将浏览器导航到相关的资源, 尽管浏览器主要是为了使用万维网, 但它们还可以用来访问 Web服务器在私人网络所提供的信息或文件在文件系统. - Wikipedia

  • 问题内容: 堆栈溢出专家,您好,我确实有业务问题,想就如何解决这个问题获得一些答案/指标/想法。也许在其他主题中已经提到了这一点,但是到目前为止,我在互联网上进行搜索,但找不到直接的答案。 业务问题:我们的一位客户希望拥有一个基于Java Web的应用程序,但希望将其作为桌面应用程序启动。 也就是说,客户端希望在桌面上的某个位置双击图标,并启动一个浏览器窗口,该窗口指向Web应用程序的URL /上

  • 我有Spring Boot Web应用程序,最初是为内部Tomcat服务器构建的(有效)。然后我采用了该应用程序在Web Logic服务器上运行。我的应用程序编译并部署到服务器没有问题,但当它不服务MVC页面时。每次调用都会抛出404错误。从下面的错误看,它看起来像Spring调度程序servlet存在,但甚至区域设置都没有正确设置。我无法弄清楚这里有什么问题或缺失,但当我创建RestContro

  • 内部Web浏览器 内部Web浏览器视图允许您从Eclipse Workbench窗口中浏览Internet。 要激活内部Web浏览器视图,请单击窗口,然后选择显示视图→其他。 在“显示视图”对话框的过滤器文本框中,输入浏览器 。 从树中选择Internal Web Browser ,然后单击OK 。 要导航到网页,请在“内部Web浏览器”视图的“URL”文本框中输入该网页的URL。

  • 问题内容: 有谁知道用于程序化Web浏览的Java库吗? Prowser不会削减它,因为没有“按下按钮”方法,Watij仅限于Internet Explorer Windows。 问题答案: htmlunit? http://htmlunit.sourceforge.net/ 上面的链接说: … HtmlUnit不是通用的单元测试框架。这是一种专门模拟浏览器以进行测试的方式…

  • 主要内容:Eclipse Web浏览器Eclipse Web浏览器 Internal Web Browser 视图允许您从 Eclipse Workbench 窗口内浏览 Internet。要激活内部 Web 浏览器视图,请单击窗口并选择 “Show View” → Other。 在“Show View”对话框的过滤器文本框中输入browser。从树中选择内部 Web 浏览器并单击确定。 要导航到网页,请在内部 Web 浏览器视图的