Docker 上的 ASP.NET 未向浏览器提供 Web 应用程序

2023-12-28

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

我正在运行 Mac,并使用 Visual Studio Code 创建 ASP.NET Web 应用程序。这是一个简单的、开箱即用的演示,基于yo aspnet“空的应用程序。”当“本机”运行(在 Docker 之外)时,该应用程序提供“Hello World!”到http://本地主机:5000 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://本地主机:5000 http://localhost:5000。相反,我得到一个ERR_CONNECTION_REFUSED。这是相当明显的,因为由于 Docker“间接”,不再有任何东西直接服务于端口 5000。换句话说,我认为转发配置不正确,或者我认为我误解了寻址。

我相信这个过程中涉及到端口转发。在我的 Dockerfile 中,我使用EXPOSE 5000我认为这可以让我使用如下运行命令将本地使用的端口 5000 映射到 Docker 容器的端口 5000:

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

但情况并非如此http://本地主机:5000 http://localhost:5000 (ERR_CONNECTION_REFUSED)。所以我想到 Docker 几乎肯定不会localhost。我注意到当 Docker 加载时,它会说:

docker is configured to use the default machine with IP 192.168.99.100

所以,我想我会尝试http://192.168.99.100:5000 http://192.168.99.100:5000,但又(令人困惑?)ERR_CONNECTION_REFUSED。接下来,我读到一篇有趣的文章here https://stackoverflow.com/questions/19897743/exposing-a-port-on-a-live-docker-container我能够从建议的命令中确定

docker inspect container_name | grep IPAddress

容器已分配"IPAddress": "172.17.0.2"

所以,我想我会尝试http://172.17.0.2:5000 http://172.17.0.2:5000。现在我们可能真的有所进展,因为而不是ERR_CONNECTION_REFUSED,我反而得到一个旋转的沙漏并导致超时。但仍然没有“Hello World!”

我可能会缺少什么?


事实证明,Web 应用程序is可以在虚拟机的IP地址上使用192.168.99.100正如怀疑的那样。172.17.0.2显然是某种转移注意力的事情。

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

遵循了优秀的建议这个帖子 http://dotnetliberty.com/index.php/2015/11/26/asp-net-5-on-aws-ec2-container-service-in-10-steps/,我编辑了 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 http://192.168.99.100(端口 80 是隐式的)

还有中提琴!这是我的“你好世界!”

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker 上的 ASP.NET 未向浏览器提供 Web 应用程序 的相关文章

  • 查明 AD 中的组是否属于通讯组?

    我正在使用 ASP net 和 C 并且对 Active Directory 知之甚少 我接到一项任务 按以下步骤编写程序 ASP net 应用程序被赋予用户的用户名 应用程序应查询具有给定用户名的用户的所有组 然后 应用程序应将这些组显示
  • Azure Web 角色中的网站项目

    我正在研究一个新的 ASP Net 项目 我们希望将其托管在 Windows Azure Web 角色中 该项目的技术要求之一是利用 ASP Net 的完整预编译选项 不可更新 单页程序集 Web Site项目模型 与 ASP Net 相反
  • 如何找出数据包的HTTP头长度?

    我知道如何手动执行此操作 通过查看十六进制转储 我怎样才能自动获得相同的信息 我必须使用 API 吗 我有wireshark 和Microsoft 网络监视器 这可以通过简单地实现Lua解析器 http wiki wireshark org
  • 如何使整个 jqGrid 禁用/只读

    如何使整个 jqGrid 禁用 只读 我有一个带有逻辑 编辑部分 的页面 当用户选择要编辑的内容时显示该页面 并在用户完成编辑 保存或取消 时隐藏该页面 显示编辑部分时 我禁用了页面上的几个其他元素 我想禁用他们在 jqGrid 中单击的能
  • 如何避免在 ASP.NET 代码隐藏中编写混乱的 JavaScript?

    我想知道在 ASP NET 中使用 Javascript 的最佳实践是什么 我不知道这是否是最佳实践 但我在代码隐藏中添加了 javascript 客户端事件 它工作正常 但这是最佳实践吗 例如 我有一个单选按钮控件 并在 Page Ini
  • 在 EB 上的 Docker 中运行的应用程序拒绝连接到自身

    我有一个 Play 2 Web 应用程序 我使用 Docker 将其部署到 Elastic Beanstalk 在此 Web 应用程序中 我启动了一个 Akka 集群 启动过程涉及将自动伸缩组中的所有节点添加为种子节点 包括其自身 第一次部
  • 实时/热重载不适用于 dockerized NestJS API

    我遇到了一个奇怪的问题 我目前正在使用 Windows 10 并通过 WSL2 运行 docker 我在 Windows 文件管理器中克隆了存储库 并且我尝试在 DEV 中运行它 也就是说 一旦我更新了在我的本地存储库中的文件中 此更改反映
  • 使用 Signalr 拥有类似 facebook 的通知系统

    我想在 ASP NET MVC 3 中实现一个类似 facebook 的通知系统 通知被发送到特定用户 以通知他对其某个项目进行操作 signalr适合这样的要求吗 我如何使用 SignalR 向特定用户 该用户的所有打开的会话 发送通知
  • 在ubuntu内核中启用cgroup cpu实时运行时

    我正在尝试在 Ubuntu 18 04 上运行的 docker 容器中使用实时调度 我已经按照给定的方法安装了实时内核here https stackoverflow com questions 51669724 install rt li
  • 如何将 GWT 与 Visual Studio 一起使用来创建 ASP.NET 网站?

    如何将 GWT 与 Visual Studio 一起使用来创建 ASP NET 网站 如果可能 GWT 可以与任何后端一起使用 只需做一些工作 它开箱即用 使用 servlet 容器 但您不需要保留此容器 容器中的关键项是加载GWT编译代码
  • 预编译的 asp.net 网站中的 - 这重要吗?

    我正在 Visual Studio 2008 上使用 Web 部署项目部署一个预编译和全页面合并的网站 请注意 所有程序集和项目都已在发布模式下编译 我的所有页面都是在发布模式下预编译的 所以它们不会被重新编译 它们只会被运行时加载 在不需
  • 如何防止 Firefox 缓存

    我尝试了很多可能的解决方案 但无法解决问题 这些不起作用 有人可以帮忙吗 我正在使用jsp servlet application 是websphere Portal 6 1 的一个portlet 切勿
  • 没有 Duende 身份服务器的 Blazor

    我有一个小型 Blazor WASM 项目 最近将其迁移到 net 6 但现在我尝试运行已发布的项目 应用程序警告我 我没有 Duende Identity Server 的许可证 我的问题是 我可以不用 Duende Identity S
  • 带有 CosmosDBTrigger 的 Azure 函数似乎不是由 upsert 触发的

    我是第一次使用 Azure Functions 我正在尝试编写一个简单的函数来响应更改或添加到 CosmosDb 集合中的文档 我写的函数如下所示 FunctionName ChangeLog public static void Run
  • 在运行时更改实体框架数据库架构

    在大多数 ASP NET 应用程序中 您可以通过在运行时修改连接字符串来更改数据库存储 即 我可以通过简单地更改连接字符串中 数据库 字段的值来从使用测试数据库更改为生产数据库 我正在尝试使用实体框架更改架构 但不一定是数据库本身 但没有成
  • 如何获取 HtmlGenericControl 的属性值?

    我创造HtmlGenericControl像这样 HtmlGenericControl inner li new HtmlGenericControl li inner li Attributes Add style list style
  • System.Linq.Dynamic 不支持 OrderByDescending("someColumn")?

    好的 在我们的项目中 我使用 System Linq Dynamic 库 但我刚刚注意到我无法执行以下操作 myDataSource OrderByDescending someColumnName 因为我收到以下错误 重载解析失败 因为无
  • 在 MS word .docs 中插入 MathMl 、 Tex 或 LaTex 方程?

    我一直在寻找 C 中 Net 的一些 dll 用于在 MS Word 中插入任何 MathMl Tex 或 LaTex 方程 我尝试了一些类似 DocX 的工具 但它们失败了 你知道吗 或任何提示如何做到这一点 谢谢 Word 2007 可
  • 如果使用 javascript 在 ASP.NET 中页面验证失败,如何禁用提交按钮

    如果页面上的验证失败 我需要使用 JavaScript 禁用表单上的保存按钮 如果没有 则必须使用以下代码启用它 Code
  • 无法通过 macvlan 网络从主机访问 docker 容器

    在我的 Linux 网络中 我无法通过专用 macvlan 网络从运行它们的主机访问我的 docker 容器 到此 macvlan 网络的所有其他连接都正常 所以基本上设置是 DOCKER1 eth0 172 0 0 1 default e

随机推荐