2016-01-24 67 views
2

这些都是我所采取的步骤:无法从码头工人容器内访问MacOSX的主机端口

Prework:

第一:

docker-machine create -d virtualbox default 

然后,我创建了一个容器以下Dockerfile:

FROM centos:latest

没有别的 - 只是CentOS的副本。我内置容器:

docker build -t mycontainer . 

并运行它:

docker run -it --net="host" --name="test" -p 9200:9200 mycontainer 

问题:当我走在容器内,并尝试访问MacOSX上(运行的服务,如简单的网络服务器或当地elasticsearch),我得到:

curl localhost:9200 
curl: (7) Failed connect to localhost:9200; Connection refused 

我从泊坞窗VM(docker-machine ssh default)内得到同样的错误。

我尝试在virtualbox中进行端口转发,将9200设置为9200 - 但它没有帮助。

任何想法?

回答

4

你不能从一个码头工人容器与本地主机连接到端口的主机上:端口(除非你用--net="host"运行容器)

您需要指定您的主机的IP地址连接。

请检查该IP主机上:

dude-server:stackoverflow cwoehrle$ ping $(hostname) 
PING dude-server (192.168.1.169): 56 data bytes 
64 bytes from 192.168.1.169: icmp_seq=0 ttl=64 time=0.053 ms 
64 bytes from 192.168.1.169: icmp_seq=1 ttl=64 time=0.069 ms 

在容器(分别用你的IP):

[email protected]:/# nc 192.168.1.169 9200 

编辑: 要连接到您的主机端口在Mac上你可以使用默认网关地址10.0.2.2,例如nc 10.0.2.2 9200

+0

我用'--net =“host”',但是我发现我可以连接到VM但不是MacOSX。那么,我需要从虚拟机获得一个双向网络到我的MacOSX? – Xiphias

+2

对不起,我跳过了--net =“host”部分。是的,您可以在virtualbox中将网络设置为NAT以访问主机的端口。尽管如此,我仍然无法连接到localhost:端口,但必须使用'nc 10.0.2.2 9200'连接到主机端口(10.0.2.2是nat连接的默认网关) – christian

+1

哇,现在这就是我喜欢的原因堆栈溢出。我不必使用'nc',甚至不需要'--net =“host”'。我的elasticsearch实例在容器内使用'curl 10.0.2.2:9200'开箱即用。我怎么知道的? (诚​​实的问题:是10.0.2.2常识吗?) – Xiphias

相关问题