Docker "--“集群商店”;及--“集群广告”;don';行不通
我尝试使用Docker "--“集群商店”;及--“集群广告”;don';行不通,docker,Docker,我尝试使用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 当我将主机1和主机2加入群集时,它失败了 host1 $ d
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
当我将主机1和主机2加入群集时,它失败了
host1 $ docker run --rm swarm join --advertise=<host1>:2375 consul://<manager>:8500
host2 $ docker run --rm swarm join --advertise=<host2>:2375 consul://<manager>:8500
host1$docker运行--rm swarm加入--广告=:2375领事://:8500
host2$docker run--rm swarm join--Advertised=:2375执政官://:8500
从swarm manager日志中,它会出错
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"
time=“2016-01-20T02:17:17Z”level=error msg=“获取http://:2375/v1.15/info:拨号tcp:2375:getsockopt:连接被拒绝”
time=“2016-01-20T02:17:20Z”level=error msg=“获取http://:2375/v1.15/info:拨号tcp:2375:getsockopt:连接被拒绝”
您是在为多主机网络发现或Swarm Agent发现运行Concur
您是否尝试检查了领事馆成员?
为什么不运行docker守护进程
将本地连接到concur
,然后concur加入到concur成员中?有什么理由不这样做吗
我还建议使用静态文件方法来发现Swarm Agent。我知道最快、最简单、最安全的意思
你应该看看:它可能会对你有帮助。因为我也遇到过类似的问题,所以我最终找到了它不起作用的原因(在我的示例中,我在局域网上使用了多个盒子192.168.10.0/24
,我希望从其中管理这些盒子,并且只允许从外部访问某些容器——以下示例在位于192.168.10.1
的盒子上运行):
- 使用
--群集存储设置守护程序consul://192.168.10.1:8500
和端口8500(在每个守护进程上部署Consor®istrator作为第一个容器)和--集群播发192.168.10.1:2375
以及-Htcp://192.168.10.1:2375 -Hunix:///var/run/docker.sock -Htcp://127.0.0.1:2375
(但是,我不会像您使用tcp://0.0.0.0:2375
并且只绑定到本地192.168.10.0/24)。如果您希望容器也只绑定到本地网络(就像我在本例中所做的那样)您可以为守护进程指定附加的--ip
参数-当容器应该也可用于其他任何地方时(在我的情况下,只有通过keepalived进行故障切换的nginx负载平衡器),您可以指定将端口绑定到所有接口docker run…-p 0.0.0:host\u port:container\u port…
- 启动守护进程
- 使用compose部署gliderlabs/registrator和Consor(这是我设置中第一个框中的一个示例,但我在所有守护进程上启动等效程序,以完成Consor HA故障切换设置)
docker compose-p bootstrap up-d
(命名专用网络中的容器bootstrap\u registor\u 1
和bootstrap\u consul\u 1
):
- 现在,守护进程在
docker/nodes
中的KV存储(concur)上注册并设置锁,Swarm似乎不会自动从该位置读取。因此,当它尝试读取可用的守护进程时,它找不到任何守护进程。现在,这一位花费了我最多的时间:
为了解决这个问题,我必须指定--discovery opt kv.path=docker/nodes
,并在所有框上使用docker compose-p bootstrap up-d
-启动Swarm,以管理器的Swarm HA故障切换结束:
version: '2'
services:
swarm-manager:
image: swarm
command: manage -H :3375 --replication --advertise 192.168.10.1:3375 --discovery-opt kv.path=docker/nodes consul://192.168.10.1:8500
hostname: srv-0
ports:
- "192.168.10.1:3375:3375" #
restart: unless-stopped
- 现在,我得到了一个只在端口3375上的
192.168.10.0/24
网络上可用的工作群。所有启动的容器也只对该网络可用,除非我在启动时指定-p 0.0.0.0:host\u port:container\u port
- 进一步扩展:当我向本地网络添加更多的盒子以增加容量时,我的想法是添加更多的守护进程,可能是非manager Swarm实例,以及这些守护进程和以后的Consor客户端(而不是服务器,从
-server
开始)
请在/var/run处删除“docker.pid”和“docker.sock”。接下来,重新启动主机并通过“sudo service docker restart”重新启动服务docker
祝你好运!!我想尝试一下键值服务器模式。静态文件和键值服务器有什么区别?根据你的指导,选项是/usr/bin/docker daemon-Htcp://0.0.0.0:2375 -Hunix:///var/run/docker.sock --群集存储:0:2375--群集存储consul://127.0.0.1:8500
。为什么设置--群集存储consul://127.0.0.1:8500
?我设置了——集群存储区concur://:8500
,docker守护进程无法启动。concur
是分布式的。每个守护进程在本地向concur公布自己,concur master加入节点(从而docker守护进程)。我在本地设置了它,这样如果网络中存在任何缺陷,守护进程就不会受到影响。它工作得很好。键值存储和静态文件之间的区别在于静态文件只需要一个文件。网络不用于代理发现,它是最安全、最简单和最快的,因为它不使用任何东西,而只使用一个文件Swarm master上的文件。无需客户端/服务器或分布式应用程序。@Auzias您的指南依赖于受此处给出的警告影响的hub discovery:……在我的案例中,我因此设置了Consor registry for discovery,因此它需要在任何Swarm之前运行,因此被设计为单独运行。在我的案例中,我未能使用同一个领事群集存储k/v以建立覆盖网络。请参阅…领事群集需要身份验证令牌。在firelyu:这与您的情况类似吗?不,我不使用集线器发现。我详细介绍了使用它的步骤,但我也建议使用静态文件发现。这是针对swarm ag的
version: '2'
services:
registrator:
image: gliderlabs/registrator
command: consul://192.168.10.1:8500
depends_on:
- consul
volumes:
- /var/run/docker.sock:/tmp/docker.sock
restart: unless-stopped
consul:
image: consul
command: agent -server -bootstrap -ui -advertise 192.168.10.1 -client 0.0.0.0
hostname: srv-0
network_mode: host
ports:
- "8300:8300" # Server RPC, Server Use Only
- "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 Use Only
- "8302:8302/udp" # Serf Gossip Protocol for WAN, Server Use Only
- "8400:8400" # CLI RPC
- "8500:8500" # HTTP API & Web UI
- "53:8600/tcp" # DNS Interface
- "53:8600/udp" # DNS Interface
restart: unless-stopped
version: '2'
services:
swarm-manager:
image: swarm
command: manage -H :3375 --replication --advertise 192.168.10.1:3375 --discovery-opt kv.path=docker/nodes consul://192.168.10.1:8500
hostname: srv-0
ports:
- "192.168.10.1:3375:3375" #
restart: unless-stopped