首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"--cluster-store“和"--cluster-advertise”不起作用

"--cluster-store“和"--cluster-advertise”不起作用
EN

Stack Overflow用户
提问于 2016-01-20 13:43:59
回答 3查看 5.3K关注 0票数 7

我尝试用swarmconsul来设置docker集群。我有managerhost1host2

我在管理器上运行consulswarm manager容器。

代码语言:javascript
复制
$ 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

代码语言:javascript
复制
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加入到群中时,它失败了。

代码语言:javascript
复制
host1 $ docker run --rm swarm join --advertise=<host1>:2375 consul://<manager>:8500
host2 $ docker run --rm swarm join --advertise=<host2>:2375 consul://<manager>:8500

从集群管理器日志中,它出错了。

代码语言:javascript
复制
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"
EN

回答 3

Stack Overflow用户

发布于 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将端口绑定到Daemons
  • Deploy gliderlab/注册器和领事(这是我的设置中第一个框中的示例,但我在所有守护进程上启动了等效的docker-compose -p bootstrap up -d )docker-compose -p bootstrap up -d(将内网容器命名为bootstrap_registrator_1bootstrap_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

  • now守护程序注册并在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

  • Now I结束于仅在192.168.10.0/24网络端口3375上可用的工作群。除非我在启动时指定了-p 0.0.0.0:host_port:container_port (使用docker run)

  • Further scaling:当我向本地网络添加更多的机器以增加容量时,我的想法是添加更多的守护进程,可能还会添加具有这些守护进程的非管理者群实例以及后来的领事客户端(而不是使用-server).

启动的服务器)),否则启动的所有容器也只能用于此网络

票数 4
EN

Stack Overflow用户

发布于 2016-01-20 15:25:21

您是否正在为多主机网络发现或群代理发现运行consul?

你有没有试着检查consul members?为什么不运行docker daemon在本地将连接到consul,然后consul join领事成员?有没有理由不这样做呢?

我还建议使用静态文件方法来发现群代理。最快,最简单,最安全的意思是我知道!

你应该看看:how to create docker overlay network between multi hosts?它可能会对你有帮助。

票数 0
EN

Stack Overflow用户

发布于 2018-03-20 14:10:35

请在/var/run中删除"docker.pid“和"docker.sock”。接下来,重启您的主机,并通过"sudo service docker restart“重启service docker。

祝你好运!!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34892377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档