加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

docker – “–cluster-store”和“–cluster-advertise”不起

发布时间:2020-12-16 03:39:47 所属栏目:安全 来源:网络整理
导读:我尝试用swarm和consul设置docker cluster.我有经理,host1和host2. 我在经理上运行consul和swarm管理器容器. $docker run --rm -p 8500:8500 progrium/consul -server -bootstrap$docker run -d -p 2377:2375 swarm manage consul:// 在host1和host2上,我使

我尝试用swarm和consul设置docker cluster.我有经理,host1和host2.
我在经理上运行consul和swarm管理器容器.

$docker run --rm -p 8500:8500 progrium/consul -server -bootstrap
$docker run -d -p 2377:2375 swarm manage consul://

在host1和host2上,我使用–cluster-store和–cluster-advertise修改守护程序选项,并重新启动docker守护程序.

host1
DOCKER_OPTS="--cluster-store=consul://

当我将host1和host2加入swarm时,它会失败.

host1 $docker run --rm swarm join --advertise=

从swarm管理器日志中,它出错了.

time="2016-01-20T02:17:17Z" level=error msg="Get http://
最佳答案
既然我遇到了类似的问题,我最终也发现了为什么它不起作用(在我的例子中,我在LAN 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进行故障转移的平衡器)指定将端口绑定到所有接口docker run … -p 0.0.0.0:host_port:container_port …< image>
>启动守护进程
>使用compose部署gliderlabs / registrator和Consul(这是我设置的第一个框中的示例,但我在所有守护进程上启动等效的完整Consul HA故障转移设置)docker-compose -p bootstrap up -d(命名容器私有网络引导程序中的bootstrap_registrator_1和bootstrap_consul_1):

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

>现在守护进程注册并在docker / nodes中的KV商店(Consul)上设置锁定,并且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网络上可用的Swarm.所有启动的容器只能用于此网络,除非我指定-p 0.0.0.0:host_port:container_port开始(用docker run)
>进一步扩展:当我向本地网络添加更多盒子以增加容量时,我的想法是添加更多Daemons和非管理器Swarm实例以及稍后的Consul客户端(而不是服务器,以-server启动).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读