2017-04-24 8 views
1

私は2つのノードを持つドッカーswarmモードのクラスタを実行しており、5つのサービス[mysql、mongo、app]を配備しています。しかし、コンテナ内のDBサービスにアクセスするためにノードからIPを取得することはできませんか?
例えば: MySQLの-h {{mysql_service_host}} ...ドッカー集団でサービスのIPをフェッチする方法は?

ノードからコンテナIPまたはサービスIPアドレスを取得する方法? docker swarmでモードホストを使用することは可能ですか?

答えて

0

同じネットワークの一部であるサービス(コンテナ)の場合は、単にサービス名を使用できます。 Dockerには、IP解決を処理するDNSリゾルバが含まれています。サービスをオーバーレイネットワークの一部にする必要があります。オーバーレイネットワークは、複数のノードにまたがることができます。

例:

services: 
    myapp: 
    image: myimage:1.0 
    deploy: 
     replicas: 1 
    networks: 
     - privnet 

    maindb: 
    image: mysql 
    deploy: 
     replicas: 1 
    networks: 
     - privnet 

networks: 
    privnet: 
    driver: overlay 

これは、2つのサービスでオーバーレイネットワークを作成します。対応するコンテナは、任意のノードで作成できます。それは問題ではありません。彼らはすべて同じオーバレイネットワークの一部であるため、互いに通信することができます。 myapp内では、maindbをmysqlサービスのDNSとして使用できます。これはDockerによってprivnetネットワーク内の適切なIPに解決されます。

btw、ノードが2つの群れクラスタはあまり意味がありません。 Swarmは、Raftコンセンサスプロトコルが動作するために最低3つのノードを必要とします。 https://raft.github.io

関連する問題