【问题标题】:Docker-swarm >> Cannot connect to the docker engine endpointDocker-swarm >> 无法连接到 docker 引擎端点
【发布时间】:2017-12-26 10:45:05
【问题描述】:
docker version 1.9.1
swarm version 1.0.1

为什么要将 3 个虚拟机(桥接网络)连接到 swarm。 “docker info”显示所有节点

状态待定。

3 个主机中的 1 个是 ma​​nager,所有输出都来自该主机。我不知道去哪里找。

正在运行swarm --debug manage token://XXXXX

输出>>

*INFO[0000] Listening for HTTP addr=127.0.0.1:2375 proto=tcp

DEBU[0000] Failed to validate pending node: Cannot connect to the docker engine endpoint  Addr=10.32.1.38:2375

DEBU[0000] Failed to validate pending node: Cannot connect to the docker engine endpoint  Addr=10.32.1.4:2375

DEBU[0000] Failed to validate pending node: Cannot connect to the docker engine endpoint  Addr=10.32.1.33:2375

然后

root@ubuntu:~# ps -ef | grep swarm

root 2158  1391  0 12:28 pts/2 00:00:00 swarm join token://xxxxxxx --addr 10.32.1.4:2375

root 2407  1213  0 13:57 pts/1 00:00:00 swarm manage token://xxxxxxx -H 0.0.0.0:4243

root 2413  1391  0 13:57 pts/2    00:00:00 grep --color=auto swarm

然后

root@ubuntu:~# swarm list token://xxxxxxxxxxx

10.32.1.4:2375
10.32.1.33:2375
10.32.1.38:2375

然后

root@ubuntu:~# ps -ef | grep docker

root      2330     1  0 12:52 ?        00:00:00 /usr/bin/docker daemon

root      2421  1391  0 14:10 pts/2    00:00:00 grep --color=auto docker

心跳排序 - 在后台运行,检查端口,名称解析,可从管理器 ping。

【问题讨论】:

    标签: docker docker-swarm


    【解决方案1】:

    docker daemon 可以监听三种不同类型的 Socket:unixtcpfd

    默认情况下,docker daemon 只监听 unix 套接字。

    如果需要远程访问Docker daemon,需要开启tcp socket。

    创建docker swarm集群时,swarm manager需要远程​​访问swarm agent节点的docker daemon。

    因此,您需要重新配置 docker daemon

    vim /etc/default/docker
    

    添加以下行:

    DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"
    

    重启docker daemon

    sudo restart docker
    

    通过这样做,可以远程访问 docker daemon

    参考资料:

    1. Docker document: docker daemon
    2. Docker document: create a swarm for development

    【讨论】:

      【解决方案2】:

      我在 /etc/default/docker 中添加了 DOCKER_OPTS 值

      DOCKER_OPTS="-H 主机IP:2375 -H unix:///var/run/docker.sock"

      更准确地说,> 与您编辑 /etc/default/docker 文件的主机 IP 相同。

      也许它会对某人有所帮助。

      【讨论】:

      【解决方案3】:

      配置方法因运行 Docker 的主机操作系统而异。

      查看 Docker 守护程序配置说明(向下滚动以查找您的主机操作系统)
      Docker Configuration Documentation

      我正在运行 Red Hat Enterprise Linux 7.2:因此我按照上面链接中我的操作系统的配置说明进行了以下操作:

      1. mkdir /etc/systemd/system/docker.service.d
      2. 创建 docker.conf 文件
        vi /etc/systemd/system/docker.service.d/docker.conf
      3. 将以下内容添加到 docker.conf 文件中,然后保存。

        [Service]
        ExecStart=
        ExecStart=/usr/bin/docker daemon -D -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375
        
      4. 刷新更改

        systemctl daemon-reload
        
      5. 重启 Docker

        systemctl restart docker
        

      配置的关键线(以及我与文档略有不同的地方)是:

      ExecStart=/usr/bin/docker daemon -D -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375

      让我们一步一步来:

      • /usr/bin/docker 从 docker 二进制文件开始
      • daemon 启动 Docker 守护进程
      • -D 以调试模式启动(非必需)
      • -H unix:///var/run/docker.sock 创建默认的 Docker Socket
      • -H tcp://0.0.0.0:2375 在所有网络接口的 2375 端口上创建一个 tcp Docker Socket 侦听

      进行这些更改后,我重新启动了我的 docker swarm 容器(在我的情况下也是我的 Consul 容器)并运行 docker -H tcp://<IP_OF_SWARM_MASTER>:<PORT_YOU_TOLD_SWARM_MASTER_TO_LISTEN_ON> info 以查看我是否不再收到 Cannot connect to the docker engine endpoint 错误。

      【讨论】:

        【解决方案4】:

        通过添加 swarm workers 服务配置 /usr/lib/systemd/system/docker.service 为我工作,其中 ExecStart 位于这一行:

        ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375
        

        刷新更改并重新启动 Docker:

        sudo systemctl daemon-reload
        sudo systemctl restart docker.service
        

        但是这种方法是不受保护的,需要额外的安全配置。

        【讨论】:

          【解决方案5】:

          我厌倦了这个线程中提到的解决方案。编辑 /etc/default/docker 对我不起作用。

          最后是什么下面的解决方案。

          编辑 /lib/systemd/system/docker.service 文件 找到以 ExecStart 开头的行并添加 -H=tcp://0.0.0.0:2375 使其看起来像

          ExecStart=/usr/bin/docker daemon -H=fd:// -H=tcp://0.0.0.0:2375
          

          保存修改后的文件 重新加载 docker 守护进程

          systemctl daemon-reload
          

          重启容器

          sudo service docker restart
          

          使用以下命令测试它是否工作

          curl http://localhost:2375/images/json
          

          如果一切正常,下面的命令应该返回一个 JSON。

          要远程测试,请使用 Docker 主机的 PC 名称或 IP 地址。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-10-15
            相关资源
            最近更新 更多