15

我正在阅读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?

我感谢任何澄清。

4

2 回答 2

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 ://blog.docker.com/2016/09/build-your-first-docker-windows-server-container/

问候

于 2016-11-01T03:37:30.090 回答
5

正如预期的那样,该端口确实暴露于“外部世界”,由于当前的 Windows 网络限制,它恰好无法从环回接口(localhost 或 127.0.0.1)上的容器主机本身访问。与其尝试通过容器主机上的环回接口访问它,不如尝试使用容器主机 ip 和容器公开的端口号从网络上的另一台机器访问它。

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

于 2017-04-27T12:49:57.263 回答