2016-01-20 56 views
6

我嘗試使用swarmconsul設置docker羣集。我有manager,host1host2
我在管理器上運行consulswarm manager容器。「--cluster-store」和「--cluster-advertise」不起作用

$ 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 

從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" 
+0

我面臨同樣的問題。我遵循這個鏈接https://docs.docker.com/swarm/install-manual/ –

回答

0

您是否正在運行多主機聯網發現或Swarm代理髮現的領事?

您是否試圖檢查consul members? 爲什麼不運行docker daemon連接本地consul然後consul join的領事成員?有沒有理由不這樣做?

我還建議Swarm代理髮現的靜態文件方法。我知道最快,最簡單,最安全的!

你應該看看:how to create docker overlay network between multi hosts?它可以幫助你。

+0

我想嘗試'鍵值服務器'模式。靜態文件和「鍵值服務器」有什麼不同? – firelyu

+0

作爲您的指導,opt是'/ usr/bin/docker守護進程-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-advertise eth0:2375 - -cluster-store consul://127.0.0.1:8500'。爲什麼要設置'--cluster-store consul://127.0.0.1:8500'?我設置了'--cluster-store consul:// :8500',並且docker守護進程無法啓動。 – firelyu

+0

'領事'分發。每個守護進程在本地通告給consul,並且consul master加入節點(因此也是docker守護進程)。我在本地設置它,所以如果網絡中有任何缺陷,守護進程將不會受到它的影響。 它運作良好。 鍵值存儲和靜態文件的區別在於靜態文件只需要一個文件。網絡不用於代理髮現,它是最安全,最簡單和最快的,因爲它不使用Swarm主文件中的任何文件。無需客戶端/服務器或分佈式應用程序。 – Auzias

3

因爲我出現了類似的問題,最終我發現它爲什麼不起作用(在我的例子中,我在局域網上使用多個盒子,我想在那裏管理並且只允許從外部向容器某些訪問 - 下面的實施例在192.168.10.1盒上運行):

  • 設置守護程序用--cluster-store consul://192.168.10.1:8500和端口8500(在每個守護程序部署領事& 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那樣綁定到其他可用地址,inst ead只綁定到本地192.168.10.0/24)。如果你希望容器只綁定到本地網絡(就像我在這種情況下那樣),你可以爲守護進程指定額外的--ip參數 - 當容器應該可用於其他任何地方(在我的情況下只有一個nginx負載通過的keepalived故障,平衡器)指定的端口綁定到所有接口docker run ... -p 0.0.0.0:host_port:container_port ... <image>
  • 啓動守護進程
  • 部署gliderlabs/registrator,並撰寫領事(這是從我的設置:第一箱一個例子,但我開始等效在所有Daemons上進行完整Consul HA故障轉移設置)docker-compose -p bootstrap up -d(在專用網絡中命名容器bootstrap_registrator_1bootstrap_consul_1bootstrap):

    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-店(領事)鎖和羣不會自動似乎從這個位置看..所以當它試圖讀取該守護進程是可用它沒有找到任何。 現在這個有點花了我最多時間: - 要使用docker-compose -p bootstrap up -d解決這個問題,我不得不指定--discovery-opt kv.path=docker/nodes並開始羣上的所有箱子藏漢與管理者的羣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 
    
  • 現在我結束了一個工作羣是隻有192.168.10.0/24網絡端口3375已啓動所有容器只適用於該網絡上可用的藏漢除非我開始(與docker run

  • 進一步縮放時指定-p 0.0.0.0:host_port:container_port:當我在本地添加更多框網絡來增加容量,我的想法是添加更多的守護進程,也許還有非管理者Swarm實例,以及後來的Consul客戶端(而不是服務器,從-server開始)。