localhost 无法在 docker windows 10 上工作

问题描述 投票:0回答:6

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

我做了很多事情,但没有任何效果。按照 docker 文档 作为入门者并构建 Microsoft 示例应用程序。第二个链接工作正常,但在尝试第一个链接方法时出现 HTTP 错误 404。

如有任何帮助,我们将不胜感激。

docker dockerfile docker-for-windows asp.net-docker-extensions
6个回答
9
投票

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

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

并将浏览器指向

http://localhost:5000

启动容器时,您可以通过

-p
选项指定哪些内部端口将作为主机上的端口公开。
-p 80:80
将网站使用的 inner 端口
80
公开到主机的端口 80。

如果

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

解决办法是:

    确保端口 80 上没有其他任何东西运行,或者
  1. 转发到不同的端口。
转发到不同的端口要容易得多。

为了确保您

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

telnet localhost 5000

如果您立即看到一个空白窗口,则表示服务器已启动并在该端口上运行。如果您在一段时间后收到消息并超时,则意味着没有人在运行。您可以使用它来检查可用端口

确保您可以连接到容器Web应用程序。

PS 一周前我遇到了这个问题,当时我正在尝试设置一个 SQL Server 容器进行测试。我已经运行了 1 个默认实例和 2 个命名实例,当我尝试创建容器时,docker

 根本没有抱怨。我花了一段时间才意识到出了什么问题。


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

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 访问容器。有关此问题的更详细说明可以通过访问此

链接获得。好像 docker 文档还没有更新,但这个问题只存在于 Windows 主机中。

也报告了一个与此相关的问题 - 请按照此

链接查看该问题。

希望这对您有帮助。

编辑

此问题的解决方案似乎将在未来的 Windows 版本中提供。然而该版本发布后,此限制在 Windows 主机中可用。点击此链接 ->

https://github.com/MicrosoftDocs/Virtualization-Documentation/issues/181


6
投票
对于那些在 2022 年遇到此问题的人,将

localhost

 更改为 
127.0.0.1
 为我解决了一个问题。


1
投票
答案是将

-p

 参数移到前面,在 
run
 之后。参数的顺序会有所不同..

所以这

不会工作:

docker run --rm example/app -p 5000:80
这会起作用:

docker run -p 5000:80 --rm example/app
    

0
投票
我在 2024 年遇到了这个问题,但解决方案不同。我不需要向前移动,相反,我必须更改

-p

 命令中的 
docker run ...
 标志。

最初,我尝试在以下位置运行 Uvicorn 服务器:

-p 8000:8000 (host-port:container-port)
但这没有用。我还是不知道为什么,但我认为可能是因为 WSL2 容器端口 8000 被防火墙阻止了。

我将此命令更改为:

-p 8000:80 (host-port:container-port)
一切都很完美!

希望这个解决方案适用于 2024 年遇到此问题的其他人。


-2
投票
还有其他问题 您必须有正确的参数顺序

这是错误的

docker run container:latest -p 5001:80
此序列启动容器,但参数 -p 被忽略,因此容器没有端口映射

这个不错

docker run -p 5001:80 container:latest
    
© www.soinside.com 2019 - 2024. All rights reserved.