Docker-swarm>>无法连接到docker引擎端点

时间:2016-01-15 12:09:10

标签: docker docker-swarm

docker version 1.9.1
swarm version 1.0.1

为什么要将3个虚拟机(桥接网)连接到群集。 "码头信息"向我显示所有节点

  
    

状态待定。

  

3个主机中有1个是经理,所有输出都来自此主机。我不知道在哪里寻找。

运行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

heartbeat sorted - 在后台运行,检查端口,名称解析,从管理员pingable。

5 个答案:

答案 0 :(得分:7)

docker守护程序可以侦听三种不同类型的套接字: unix tcp fd

默认情况下, docker守护程序只需侦听unix socket。

如果需要远程访问Docker守护程序,则需要启用tcp套接字。

创建docker swarm集群时,swarm管理器需要远程访问swarm代理节点的docker守护进程。

因此,您需要重新配置 docker守护程序

vim /etc/default/docker

添加以下行:

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

重新启动 docker守护程序

sudo restart docker

通过这样做,可以远程访问 docker守护程序

参考文献:

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

答案 1 :(得分:3)

我在/ etc / default / docker

中添加了DOCKER_OPTS值

DOCKER_OPTS =" -H<>主机IP<&gt ;:2375 -H unix:///var/run/docker.sock"

更精确<<主机IP>>是您编辑/ etc / default / docker文件的主机IP。

也许它会帮助别人。

答案 2 :(得分: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
    
  6. 配置的关键线(以及我稍微偏离文档的地方)是:

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

    让我们逐一讨论:

    • /usr/bin/docker从docker binary
    • 开始
    • daemon启动Docker Daemon
    • -D以调试模式启动(不需要)
    • -H unix:///var/run/docker.sock创建默认的Docker Socket
    • -H tcp://0.0.0.0:2375创建一个tcp Docker Socket,侦听所有网络接口上的端口2375

    进行这些更改后,我重新启动了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错误。

答案 3 :(得分:2)

通过添加swarm worker service /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

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

答案 4 :(得分:0)

我厌倦了这个帖子中提到的解决方案。编辑/ 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 Host的PC名称或IP地址。