Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker无法访问容器外部的端口_Docker_Docker Compose - Fatal编程技术网

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

我正在本地主机上运行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/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容器(默认)和映射端口。因此,在我的服务器上,我可以curl
127.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>