Docker无法访问容器外的端口

我正在运行zookeeper(而不是通过docker)在我的本地主机端口2181。

另外,试图通过docker运行一个docker镜像如下。

# # Mesos # mesos-master: image: mesosphere/mesos-master:1.0.3 restart: always privileged: true network_mode: host volumes: - ~/mesos-data/master:/tmp/mesos environment: MESOS_CLUSTER: "mesos-cluster" MESOS_QUORUM: "1" MESOS_ZK: "zk://localhost:2181/mesos" MESOS_PORT: 5000 MESOS_REGISTRY_FETCH_TIMEOUT: "2mins" MESOS_EXECUTOR_REGISTRATION_TIMEOUT: "2mins" MESOS_LOGGING_LEVEL: INFO MESOS_INITIALIZE_DRIVER_LOGGING: "false" 

Zookeepr正在侦听端口2181,但是我的docker进程仍然无法连接到动物园pipe理员端口2181。

有什么遗漏吗?

谢谢

您从Docker容器中指向localhost 。 这意味着您的docker容器试图连接到该特定端口上的容器本身(localhost),而不是在您的服务器的本地主机上。 你需要指定一个特定的IP连接,或者你可以使用--net="host"选项运行你的--net="host"容器。

 $ docker run -d --net="host" ... 

这将在主机networking内部创build容器,而不是在默认桥接networking内部。

例如:我在主机的127.0.0.1:80上创build了一个Apache容器(默认)和映射端口。 所以在我的服务器上,我可以curl127.0.0.1:80

 $ docker run -d -p 80:80 httpd 

curl 127.0.0.1:80来自主持人的作品:

 $ curl localhost:80 <html><body><h1>It works!</h1></body></html> 

如果我启动一个curl安装的帮助容器,我将curl127.0.0.1:80

  $ docker run --rm tutum/curl /bin/bash -c 'curl 127.0.0.1:80' % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0curl: (7) Failed to connect to 127.0.0.1 port 80: Connection refused 

连接被拒绝,因为容器在默认桥接networking内,并试图在端口80上自行curl。

现在我在hostnetworking内启动容器:

 $ docker run --net=host --rm tutum/curl /bin/bash -c 'curl 127.0.0.1:80' % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 45 100 45 0 0 8573 0 --:--:-- --:--:-- --:--:-- 22500 <html><body><h1>It works!</h1></body></html> 

--net=host转换成你的--net=host -compose文件意味着你必须添加network_mode: host