首页 文章

Docker无法访问容器外的端口

提问于
浏览
1

我在本地主机上使用端口2181运行zookeeper(不是通过docker) .

此外,尝试通过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进程无法连接到zookeeper端口2181 .

有什么遗漏?

谢谢

1 回答

  • 6

    您指向Docker容器内的 localhost . 这意味着您的docker容器尝试连接到该特定端口上的容器本身(localhost),而不是连接到服务器的localhost . 您需要指定要连接的特定IP,或者可以使用 --net="host" 选项运行docker容器 .

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

    这将在主机网络内创建容器,而不是在默认桥接网络内 .

    示例:我在主机的 127.0.0.1:80 上创建了一个apache容器(默认)和映射端口 . 所以在我的服务器上我可以卷曲 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>
    

    如果我启动了一个安装了curl的帮助容器,我将卷曲 127.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
    

    连接被拒绝,因为容器位于默认桥接网络内,并尝试在端口80上卷曲自身 .

    现在我在 host 网络内启动容器:

    $ 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 已翻译为您的docker-compose文件意味着您必须添加 network_mode: host

相关问题