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