我尝试用swarm和consul来设置docker集群。我有manager、host1和host2。
我在管理器上运行consul和swarm manager容器。
$ docker run --rm -p 8500:8500 progrium/consul -server -bootstrap
$ docker run -d -p 2377:2375 swarm manage consul://<manager>:8500在host1和host2上,我使用--cluster-store和--cluster-advertise修改了守护进程选项,并重新启动了docker daemon。
host1
DOCKER_OPTS="--cluster-store=consul://<manager>:8500 --cluster-advertise=<host1>:2375"
host2
DOCKER_OPTS="--cluster-store=consul://<manager>:8500 --cluster-advertise=<host2>:2375"当我将host1和host2加入到群中时,它失败了。
host1 $ docker run --rm swarm join --advertise=<host1>:2375 consul://<manager>:8500
host2 $ docker run --rm swarm join --advertise=<host2>:2375 consul://<manager>:8500从集群管理器日志中,它出错了。
time="2016-01-20T02:17:17Z" level=error msg="Get http://<host1>:2375/v1.15/info: dial tcp <host1>:2375: getsockopt: connection refused"
time="2016-01-20T02:17:20Z" level=error msg="Get http://<host2>:2375/v1.15/info: dial tcp <host2>:2375: getsockopt: connection refused"发布于 2016-05-31 18:17:18
因为我也遇到了类似的问题,所以我最终找到了它不起作用的原因(在我的例子中,我在局域网192.168.10.0/24上使用了多个机器,我想从里面管理这些机器,并且只允许从外部访问某些容器--下面的例子在192.168.10.1的机器上运行):
--cluster-store consul://192.168.10.1:8500和端口8500 (在每个守护程序上部署Consul & registrator作为第一个容器)和--cluster-advertise 192.168.10.1:2375以及-H tcp://192.168.10.1:2375 -H unix:///var/run/docker.sock -H tcp://127.0.0.1:2375设置守护程序(但是,我不会像使用tcp://0.0.0.0:2375那样绑定到其他可用地址,而是仅绑定到本地192.168.10.0/24)。如果您希望容器仅绑定到本地网络以及(就像我在本例中所做的那样),您可以为守护进程指定额外的--ip参数-当容器应该对其他任何地方都可用时(在我的示例中,只有一个nginx负载均衡器通过keepalived进行故障切换),您可以指定将端口绑定到所有接口,并使用compose将端口绑定到Daemonsdocker-compose -p bootstrap up -d )docker-compose -p bootstrap up -d(将内网容器命名为bootstrap_registrator_1和bootstrap_consul_1 ):版本:'2‘服务:注册器:图像:gliderlabs/注册器命令: consul:// 192.168.10.1 :8500 depends_on:- consul volumes:- /var/run/docker.sock:/tmp/docker.sock重新启动:除非停止:图像: consul命令: agent -server -bootstrap -ui -advertise 192.168.10.1 -client 0.0.0.0主机名:srv-0rpc:主机端口:- "8300:8300“#服务器network_mode,仅服务器使用- "8301:8301/tcp“# Serf Gossip Protocol for LAN - "8301:8301/udp”# Serf Gossip Protocol for LAN - "8302:8302/tcp“# Serf Gossip Protocol for WAN,Server Only - "8302:8302/udp”# Serf Gossip Protocol for WAN,仅供服务器使用- "8400:8400“# CLI RPC - "8500:8500”# HTTP API & Web UI - "53:8600/tcp“# DNS Interface - "53:8600/udp”# DNS Interface restart: unless-stopped
docker/nodes中的KV-store (领事)上设置锁定,Swarm似乎不会自动从此位置读取。因此,当它尝试读取哪些守护程序可用时,它找不到任何守护程序。这一点花费了我最多的时间:为了解决这个问题,我必须指定--discovery-opt kv.path=docker/nodes,并在所有机器上使用docker-compose -p bootstrap up -d启动,最后以管理器的Swarm HA故障转移结束:版本:'2‘服务:群管理器:映像:群命令: manage -H : 3375 --replication --advertise 192.168.10.1:3375 --discovery-opt kv.path=docker/nodes consul://192.168.10.1:8500主机名: srv-0端口:-“192.168.10.1 :3375 :3375:3375”# restart: unless-stopped
192.168.10.0/24网络端口3375上可用的工作群。除非我在启动时指定了-p 0.0.0.0:host_port:container_port (使用docker run)
-server).启动的服务器)),否则启动的所有容器也只能用于此网络
发布于 2016-01-20 15:25:21
您是否正在为多主机网络发现或群代理发现运行consul?
你有没有试着检查consul members?为什么不运行docker daemon在本地将连接到和consul,然后consul join领事成员?有没有理由不这样做呢?
我还建议使用静态文件方法来发现群代理。最快,最简单,最安全的意思是我知道!
你应该看看:how to create docker overlay network between multi hosts?它可能会对你有帮助。
发布于 2018-03-20 14:10:35
请在/var/run中删除"docker.pid“和"docker.sock”。接下来,重启您的主机,并通过"sudo service docker restart“重启service docker。
祝你好运!!
https://stackoverflow.com/questions/34892377
复制相似问题