Docker无法访问容器外部的端口
我正在本地主机上运行zookeeper(不是通过docker),端口为2181 另外,尝试通过docker compose运行docker映像,如下所示Docker无法访问容器外部的端口,docker,docker-compose,Docker,Docker Compose,我正在本地主机上运行zookeeper(不是通过docker),端口为2181 另外,尝试通过docker compose运行docker映像,如下所示 # # Mesos # mesos-master: image: mesosphere/mesos-master:1.0.3 restart: always privileged: true network_mode: host volumes: - ~/mesos-data/ma
#
# 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进程仍然无法连接到zookeeper端口2181
少了什么吗
谢谢您正从docker容器中指向
localhost
。这意味着您的docker容器尝试连接到该特定端口上的容器本身(localhost),而不是服务器的localhost。您需要指定要连接的特定IP,或者可以使用--net=“host”
选项运行docker容器
$ docker run -d --net="host" ...
这将在主机网络内而不是默认网桥网络内创建容器
例如:
我在主机的127.0.0.1:80
上创建了一个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>
连接被拒绝,因为容器位于默认网桥网络内,并试图在端口80上卷曲自身
现在,我启动主机
网络中的容器:
$ 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>
$docker run--net=host--rm tututum/curl/bin/bash-c'curl 127.0.0.1:80'
%总接收百分比%x平均速度时间电流
数据加载上载总左速度
100 45 100 45 0 0 8573 0 --:--:-- --:--:-- --:--:-- 22500
它起作用了!
翻译成docker compose文件的--net=host
意味着您必须在compose文件中添加网络模式:主机
尝试添加主机名:127.0.0.1
。zk是否也在网络模式:主机
下运行?另外,尝试使用127.0.0.1
ZK而不是localhost
,这是一个正常的过程,不作为docker运行。我在docker compose中添加了网络模式:host。另外,ZK是一个正常的进程,没有以docker的身份运行。@user1578872您能从服务器卷曲到localhost:2181以检查zookeeper是否可以访问并且工作正常吗?然后从部署在主机网络上的容器中尝试相同的操作。它在我的主机中工作,但在部署在主机网络中的容器中不工作。不确定还要添加什么。curl 127.0.0.1:2181代替localhost也不起作用?docker检查容器id的输出是什么?查看网络部分。对于“网桥”:“”,它应该是空的,对于“主机”:{}节,应该有配置
$ 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>