2016-10-31 93 views
13

我读过docker API并尝试创建一个简单的容器并显示一个端口。在Windows 10中使用Docker for Windows公开容器端口

在我的例子,我有一个关于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?

我很感激任何澄清。

+0

问题没有足够的信息。我们至少需要docker命令,正在使用的映像或Dockerfile。 Windows容器或Linux容器? –

+0

** Docker Remote API **针对什么码头引擎? Windows容器? Linux容器?没有基础图像,您无法运行容器。什么形象?你叫** Docker Remote API **你是怎么称呼它的?这是一个resfful权利?你使用了什么命令?我不能**知道**如果你不给** **足够的信息,你在问什么。 –

+0

对不起,我的意思不是粗鲁的卡洛斯,但你的评论都没有与问题相关。这个形象是什么没关系。重要的是,根据API文档,我将端口9090暴露在容器外部,并映射到容器内部的端口9595,这不起作用。Netsh不会影响容器行为或配置的任何内容。 –

回答

3

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

如果您使用Docker Toolbox或Docker for Windows,则需要特殊待遇。你应该看到本地主机没有问题(如果你的容器是Linux)。如果你想你的容器能够从外部观察,尝试这与高架电源外壳:

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

如果你的容器是windows但是你不会看到本地主机,你需要使用容器内部地址:

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

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

问候

+0

你好卡洛斯,是的,我使用最新的docker for win10和'docker info'返回''ServerVersion“:”1.12.2-cs2-ws-beta“'根据Docker API v1.24(https ://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#create-a-container)'PortBindings'确实存在。 –

+0

您需要Docker for Windows的额外端口重定向。我会更新答案 –

+0

事实上,我用'码头检查'它解释了术语的区别。 –

2

端口真的是被如预期的那样暴露于“外部世界”,由于当前的Windows网络限制,它刚好在容器主机本身在回送接口(localhost或127.0.0.1)上无法访问。与其试图通过容器主机上的回送接口访问它,请尝试使用容器主机IP和容器公开端口号从网络中的另一台计算机访问它。

这里有一个很好的补充https://blog.sixeyed.com/published-ports-on-windows-containers-dont-do-loopback/

相关问题