在 Windows 10 中使用 Docker for Windows 将容器端口公开给主机

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

我已阅读 docker API 并尝试创建一个简单的容器并公开 1 个端口。

在我的示例中,我有一个应用程序侦听容器内的 TCP 端口

9595
,我想从外部世界(即容器的主机)在端口
9090
上访问它。

创建容器时,我有

"ExposedPorts": { "9595/tcp: {}" }
"PortBindings": { "9595/tcp": [{ "HostPort": "9090" }] }

所以,如果我从主机访问

http://container_internal_ip:9595
它就可以了!但是,当我访问
http://localhost:9090
(这是我期望使用此端口映射功能时)时,它不起作用...

跑步时

docker port containerID
我有
9595/tcp -> 0.0.0.0:9090
,这应该意味着,
when connecting to any IP on the host, at port 9090, forward to the container in port 9595

那么,这里出了什么问题呢?为什么我无法连接到 9090?

我很感激任何澄清。

docker docker-for-windows
2个回答
5
投票

该端口确实按照预期暴露给“外部世界”,只是由于当前的 Windows 网络限制,它恰好无法从环回接口(localhost 或 127.0.0.1)上的容器主机本身访问。不要尝试通过容器主机上的环回接口访问它,而是尝试使用容器主机 IP 和容器公开的端口号从网络上的另一台计算机访问它。

有一篇很好的文章,位于 https://blog.sixeyed.com/published-ports-on-windows-containers-dont-do-loopback/


5
投票

请发布您正在使用的docker命令。

如果您使用 Docker Toolbox 或 Docker for Windows,则需要特殊对待。您应该会看到 localhost 没有问题(如果您的容器是 Linux)。如果您希望您的容器从外部可见,请尝试使用 Elevated Power Shell:

netsh interface portproxy add v4tov4 listenaddress=yourip listenport=9090 connectaddress=10.0.75.1 connectport=9090

如果您的容器是 Windows,但是您不会看到 localhost 并且您需要使用容器内部地址:

docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" <cointainerid>

参考:https://www.docker.com/blog/build-your-first-docker-windows-server-container/

问候

© www.soinside.com 2019 - 2024. All rights reserved.