docker version 1.9.1
swarm version 1.0.1
为什么要将3个VM(桥接网)连接到swarm。 “docker info”显示了所有节点
状态待定。
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
心跳排序 - 在后台运行,检查端口,名称解析,从管理器pingable。
docker守护程序可以侦听三种不同类型的Socket:unix,tcp和fd。
默认情况下,docker守护程序只是侦听unix套接字。
如果需要远程访问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守护程序。
参考文献:
我在/ etc / default / docker中添加了DOCKER_OPTS值
DOCKER_OPTS =“ - H <>主机IP <>:2375 -H unix:///var/run/docker.sock”
更精确的是“主机IP”是您编辑/ etc / default / docker文件的主机IP。
也许它会帮助别人。
配置方法因运行Docker的主机操作系统而异。
请参阅Docker守护程序配置说明(向下滚动以查找主机操作系统): Docker Configuration Documentation
我正在运行Red Hat Enterprise Linux 7.2:因此我按照上面的链接执行了操作系统的配置说明并执行了以下操作:
mkdir /etc/systemd/system/docker.service.d
vi /etc/systemd/system/docker.service.d/docker.conf
[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon -D -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375
systemctl daemon-reload
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 Daemon-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
错误。
通过添加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
但这种方法是不受保护的,需要额外的安全配置。
我厌倦了这个帖子中提到的解决方案。编辑/ 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地址。