本地主机无法正常工作的docker Windows 10

Usa*_*eem 5 docker dockerfile docker-for-windows asp.net-docker-extensions

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

我做了很多事情,但没有任何效果。跟随docker docs作为启动器并构建microsoft示例应用程序。第二个链接运行正常,但是尝试第一个链接方法时出现HTTP错误404。

任何帮助表示赞赏。

Rav*_*ndo 7

为了访问 Docker 文档上发布的示例(您指出该示例不起作用),请按照以下步骤操作,

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

docker ps -a
Run Code Online (Sandbox Code Playgroud)

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

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

 docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" webserver
Run Code Online (Sandbox Code Playgroud)

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

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

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

也报告了一个与此相关的问题 - 请点击此链接查看该问题。

希望这可以帮助你。

编辑

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


Pan*_*vos 6

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

docker run -d -p 5000:80 --name myapp myasp
Run Code Online (Sandbox Code Playgroud)

并将浏览器指向http://localhost:5000.

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

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

解决办法是:

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

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

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

telnet localhost 5000
Run Code Online (Sandbox Code Playgroud)

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

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


Gle*_*b V 6

对于那些在2022年遇到这个问题的人来说,改变为我解决了一个问题localhost127.0.0.1