2017-09-07 4 views
0

docker documentationから、ユーザー定義のブリッジネットワークを使用せずにホスト名を使用してコンテナを見つけるためにドッカーDNSを使用できないことが分かりました。私は、コマンドを使用して1を作成しました:は、ユーザー定義のブリッジをswarm compose yamlファイルで使用することはできません

docker network create --driver=overlay --subnet=172.22.0.0/16 --gateway=172.22.0.1 user_defined_overlay 

をし、それを使用するコンテナを展開しようとしました。ファイルがどのような構成:

version: "3.0" 
    services: 
     web1: 
     image: "test" 
     ports: 
      - "12023:22" 
     hostname: "mytest-web1" 
     networks: 
      - test 
     web2: 
     image: "test" 
     ports: 
      - "12024:22" 
     hostname: "mytest-web2" 
     networks: 
      - test 
    networks: 
     test: 
     external: 
      name: user_defined_overlay 

私のドッキングウィンドウのバージョンは次のとおりです。私は、スタックを展開しようとしたときDocker version 17.06.2-ce, build cec0b72 と私は次のエラーを得た:

network "user_defined_bridge" is declared as external, but it is not in the right scope: "local" instead of "swarm" 

私はオーバーレイネットワークを作成し、それを定義することができました作成ファイル。それはうまく働いたが、それは橋のためではなかった。ドッカーネットワークLSの 結果:

NETWORK ID   NAME      DRIVER    SCOPE 
cd6c1e05fca1  bridge      bridge    local 
f0df22fb157a  docker_gwbridge   bridge    local 
786416ba8d7f  host      host    local 
cuhjxyi98x15  ingress     overlay    swarm 
531b858419ba  none      null    local 
15f7e38081eb  user_defined_overlay  overlay    swarm 

UPDATE

Iは、(第2のワーカーノードで実行しながら、第1容器は、マネージャ上で実行)、私はユーザに指定された2つの異なる群れノード上で実行される2つのコンテナを作成しようとしました上記のスタックのように定義されたオーバーレイネットワーク。私はホスト名を使ってmytest-web1コンテナからmytest-web2コンテナにpingを試みましたが、得ました。unknown host mytest-web2

+0

ドッカースタックを使用する場合、ネットワークはオーバーレイでなければなりません。だからその問題は何ですか –

+0

スタックネットワークを指定することはできませんか?オーバーレイのみ? – tkyass

答えて

1

17.06から、swarmスコープでノードローカルネットワークを作成できます。そして、あなたが群れモードで定義されたサービスとスタックでこのネットワークを使用することができます--scope=swarmオプション、例えば:

docker network create --scope=swarm --driver=bridge \ 
    --subnet=172.22.0.0/16 --gateway=172.22.0.1 user_defined_bridge 

で行ってください。詳細はPR #32981をご覧ください。


編集:問題が著しく複雑になっているようです。単一の作成ファイルですべてが実行されている限り、ネットワークを外部として定義する必要はありません。コンテナ間の通信を行う場合は、オーバーレイネットワークを使用する必要があります。ドッカーが作成するデフォルトの「ブリッジ」ネットワークを除いて、ブリッジおよびオーバーレイネットワークにはDNS検出が含まれています。構成ファイルを使用すると、明示的にその名前を持つ外部ネットワークとして構成することなく、このネットワークを使用することはありません。私も、「ホスト名」の設定を削除した

version: "3.0" 
    services: 
    web1: 
     image: "test" 
     ports: 
     - "12023:22" 
    web2: 
     image: "test" 
     ports: 
     - "12024:22" 

注:だから、仕事にコンテナのネットワーキングにコンテナを取得するには、docker-composeまたはdocker stack deployは/あなたのプロジェクトのためのネットワークを作成すると自動的にスタックさせることができます。 DNS解決には必要ありません。これらのいずれかのコンテナから「web1」または「web2」という名前のサービスVIPと直接通信できます。

docker-composeとすると、デフォルトのブリッジネットワークが作成されます。スウォームモードでオーバーレイネットワークが作成されます。これらのデフォルトは、各シナリオでDNSの検出とコンテナ間の通信を可能にするのに理想的です。

+0

@BMitchあなたが提供したコマンドはエラーなしで実行されました。しかし、私はまだhostnameを使って別のコンテナからコンテナをpingできません。私は2つのコンテナを1つのマネージャーで実行し、2つ目はワーカーで実行していました。別名を使用してpingを実行できますが、ホスト名は使用できません。私は定義されたブリッジネットワークが私の問題を解決すると指定すると思った。私の仮定は間違っていますか? – tkyass

+0

ブリッジネットワークのようなノードローカルネットワークは、swarmの複数のノードで動作しません。そのためには、オーバーレイネットワークが必要です。同じノード上で実行されているコンテナだけが、コンテナからコンテナへの対話が可能です。それ以外のものは、ホスト上の公開ポート経由でアクセスする必要があります。 – BMitch

+0

あなたの答えは@BMitchにもう一度感謝します。私の質問は十分にはっきりしていないと思う。私がしたいのは、ホストファイルを使用せずにホスト名を使って単一スタックから作成したコンテナ間で通信できることだけです。私は、ユーザー定義のネットワークでスタックを展開すると、ドッカーがこのようなケースでDNSをサポートしていると思っていました。上記の質問を編集して、私の質問に最もよく反映されました – tkyass

関連する問題