2016-01-20 17 views
6

ドッカークラスタをswarmconsulに設定しようとしました。私はmanager,host1、およびhost2です。
私はconsulswarm managerのコンテナをマネージャーに出しています。 host1とhost2のオン"--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 

、私は--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" 

私はswarmに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を使用していますか?

consul membersを確認しようとしましたか? docker daemonに接続すると、からconsulに、その後consul joinで領事のメンバーになるのはなぜですか?そうしない理由がありますか?

また、Swarmエージェントの検出用の静的ファイルメソッドもお勧めします。私が知っている最も速い、最も簡単で安全な手段です!

あなたはそれを見てください:how to create docker overlay network between multi hosts?それはあなたを助けるかもしれません。

+0

私は 'key-value server'モードを試したいと思います。静的ファイルと 'key-value server'の違いは何ですか? – 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'を設定し、ドッカーデーモンが起動しません。 – firelyu

+0

'consul'が配布されています。各デーモンはローカルでconsulに自分自身をアドバタイズし、consulマスターはノード(したがってdockerデーモン)に参加します。私はそれをローカルに設定しているので、ネットワークに何らかの欠陥があると、デーモンはその影響を受けません。 これはうまくいきます。 キー値ストアと静的ファイルの違いは、静的ファイルにはファイルだけが必要であることです。ネットワークはエージェント発見には使用されませんが、Swarmマスター上のファイルだけを使用するのではなく、最も安全で、最も簡単で最速です。クライアント/サーバーも分散アプリケーションも必要ありません。 – Auzias

3

私も同じような問題が起きています。なぜ私はそれがうまくいかなかったのかを知りました。私の例ではLANの複数のボックスを使用しています192.168.10.0/24そこから管理したいだけです特定のコンテナへの外部からのアクセス - 以下の実施例は、192.168.10.1のボックス上で実行されている):()最初の容器として各デーモンにコンサル&レジを展開--cluster-store consul://192.168.10.1:8500とポート8500とデーモンを設定

  • --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と同じように他の利用可能なアドレスにバインドしていません。 eadはローカル192.168.10.0/24にのみバインドします)。コンテナだけをローカルネットワークにバインドしたい場合は、(私がこの場合と同じように)デーモンに追加の--ipパラメータを指定することができます - コンテナが他の場所でも使用できるようにする場合(私の場合はnginxロードあなたはすべてのインターフェイスdocker run ... -p 0.0.0.0:host_port:container_port ... <image>
  • にポートを結合指定)keepalivedのを経由して、フェールオーバーとバランサデーモンを起動し
  • 展開gliderlabs /レジやコンと領事(これは私のセットアップの最初のボックスからの例ですが、私は同等を開始すべてのデーモンで完全なConsul HAフェールオーバー設定)docker-compose -p bootstrap up -dbootstrap_registrator_1bootstrap_consul_1のコンテナの名前はbootstrap):

    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 
    
  • であるデーモン読み取ろうとしたときにデーモンが..だから登録し、KV-店舗にロックを設定する(領事)をdocker/nodesにし、スウォームは自動的にこの場所から読み取るようには見えません利用可能なものは見つかりません。 は今、このビットは私に最も時間費用:私は--discovery-opt kv.path=docker/nodesを指定し、docker-compose -p bootstrap up -dでスウォームを開始しなければならなかったこの問題を解決するには を - すべてのボックスにマネージャーのスウォームHAフェールオーバで終わるためにaswell:今すぐ

    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 
    
  • 私は

  • さらにスケーリング(docker runで)起動したときaswell私は-p 0.0.0.0:host_port:container_portを指定しない限り開始されているすべてのコンテナがこのネットワークにのみ利用可能ですポート3375.上192.168.10.0/24ネットワーク上でのみ使用可能です作業スウォームで終わる:いつIローカルにボックスを追加するネットワークを拡張して、デーモンと、おそらく非マネージャーのSwarmインスタンスを、後でConsulクライアント(サーバではなく、-serverで始まる)と一緒に追加することが私の考えです。
関連する問題