【问题标题】:localhost not working docker windows 10本地主机不工作docker windows 10
【发布时间】:2018-04-11 03:00:48
【问题描述】:

我正在使用 VS2017 docker 支持。 VS 为我创建了 DockerFile,当我构建 docker-compose 文件时,它会创建容器并在 172.x.x.x IP 地址上运行应用程序。但我想在 localhost 上运行我的应用程序。

我做了很多事情,但没有任何效果。跟随 docker docs 作为首发和 building microsoft sample app 。第二个链接运行良好,但在尝试第一个链接方法时出现 HTTP 错误 404。

感谢任何帮助。

【问题讨论】:

  • 这就是 Docker 的工作原理。每个容器都有自己的内部地址。如果您想使用本地端口访问内部服务,请使用-p 参数公开它,例如-p 18000:80 将在127.0.0.1:80 公开一个Web 应用程序。具体来说,贴出你用来创建容器的参数
  • 投反对票的人,还记得当试图创建你的第一个网站在名为Docker的新事物上运行吗?你花了多长时间试图找出如何与它交谈?
  • 请指定您正在运行的 Windows 和 Docker 版本,以及您使用的命令行参数。不是Windows 10,而是10.0.16299.15。您可以通过在命令行中输入 ver 来获取此信息。对于码头工人:docker version。你已经在 80 端口运行了一些东西吗?也许带有默认站点的 IIS?您是否尝试过更改转发端口,例如使用-p 18000:80 更改为18000 并连接到localhost:18000
  • Docker 版本 17.09.0-ce,构建 afdb6d4 和 Windows 10 pro 版本 10.0.15063 .... 我曾经指定端口 5000:80 但没有任何效果...所以我将 docker 重置为默认,现在它在 linux 容器上工作,早些时候我在微软网站的指导下在 windows 容器上工作
  • Windows 容器没有任何问题。 Linux 容器适用于 Linux 应用程序。您尝试的 nothing works 到底是什么?至于教程,你不再需要这些步骤,VS 模板已经提供了 Docker 支持。您可以从模板创建一个新的网络应用程序并运行它。

标签: docker dockerfile docker-for-windows asp.net-docker-extensions


【解决方案1】:

很可能一个不同的应用程序已经在端口 80 上运行。您必须将您的网站转发到一个不同的端口,例如:

docker run -d -p 5000:80 --name myapp myasp

然后将浏览器指向http://localhost:5000

当您启动一个容器时,您可以通过-p 选项指定哪些内部端口将作为主机上的端口公开。 -p 80:80 将网站使用的 inner 端口 80 暴露给主机的 80 端口。

Docker 不会抱怨,但如果 另一个 应用程序已经在端口 80 上侦听,例如 IIS、另一个 Web 应用程序或任何具有在 80 上运行的 Web 界面的 工具默认。

解决办法是:

  1. 确保没有其他东西在端口 80 上运行或
  2. 转发到不同的端口。

转发到不同的端口要容易得多。

为确保您可以连接到端口,请使用 telnet 命令,例如:

telnet localhost 5000

如果您立即得到一个空白窗口,则表示服务器已启动并在此端口上运行。如果您在一段时间后收到消息并超时,则表示没有人在运行。您可以使用它来检查空闲端口确保您可以连接到您的容器 Web 应用程序。

PS 我在一周前遇到了这个问题,因为我试图设置一个 SQL Server 容器进行测试。我已经运行了 1 个默认实例和 2 个命名实例,当我尝试创建容器时,docker 根本没有抱怨。我花了一段时间才意识到出了什么问题。

【讨论】:

  • 我遵循了你的命令,但是在连接到 localhost 时得到了这个 -> “无法访问此站点”,此外我在 80 上运行了 telnet 命令并且得到了一个空白窗口(服务器已启动) ,然后我在 5000 上运行,我得到“无法在端口 5000 上打开与主机的连接”
  • @RavinduFernando 我不能,这就是我试图解决的问题。我只能通过 NATed IP 访问它...我发现这个回复与我的问题有关..github.com/MicrosoftDocs/Virtualization-Documentation/issues/… 阅读最后一条评论
  • @UsamaSaleem 所以这意味着我添加的答案仍然有效 ryt?
  • 根据我的研究,是的。但如果有人有其他想法或意见,我很乐意申请。
【解决方案2】:

要访问 Docker Docs 上发布的示例,您指出该示例不起作用,请按照以下步骤操作,

1 - 列出所有正在运行的 docker 容器

docker ps -a

运行此命令后,您应该能够查看当前正在运行的所有 docker 容器,并且如果您正确遵循了 docker 文档示例,您应该会在其中看到名称为 webserver 的容器。

2 - 获取运行 webserver 容器的 IP 地址。为此,请运行以下命令。

 docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" webserver

您现在应该获得 webserver 容器正在运行的 IP 地址,希望您熟悉此步骤,因为它甚至可以在您随问题附加的构建 Microsoft 示例应用程序示例中找到。

访问运行上述命令后获得的 IP 地址,您应该会看到所需的输出。

回答您的第一个问题(在 docker for windows 中使用 localhost 访问 docker 容器),在 Windows 主机中,由于默认 NAT 网络堆栈的限制,您无法使用 localhost 访问容器。访问此link 可以获得有关此问题的更详细说明。似乎 docker 文档尚未更新,但此问题仅存在于 Windows 主机中。

也报告了一个问题 - 请关注此 link 以查看。

希望对你有所帮助。

编辑

此问题的解决方案似乎将在未来的 Windows 版本中提供。然而,该版本发布后,此限制在 Windows 主机中可用。点击此链接 -> https://github.com/MicrosoftDocs/Virtualization-Documentation/issues/181

【讨论】:

  • 这是一个老问题。我在带有端口转发的容器内使用 SQL Server 并通过 localhost 连接就好了
  • 可能是因为旧版本。问题中提到的 docker docs 示例清楚地指出了所有步骤,并且该示例无法通过 localhost 访问只会由于上述问题而发生。
  • 如果在端口 80 上运行其他东西,例如 IIS 的默认网站,或任何其他已部署的 Web 项目,也会发生这种情况。如果端口已被占用,Docker 不会抱怨
  • 同意
  • 感谢您的回答...我深入搜索并得到了答案。我按照微软教程切换到 windows 容器,所以它映射到 172.x.x.x ,现在我切换回 linux 容器,一切运行正常。
猜你喜欢
  • 2017-08-09
  • 2018-05-25
  • 2014-07-25
  • 1970-01-01
  • 2020-05-14
相关资源
最近更新 更多