同じホスト内の異なるネットワークでコンテナを作成して通信する可能性はありますか?現在、docker-composeを使用していないことに注意してください。
以下は私がしたことの要約です。次のコマンドを使用して2つのネットワークを作成しました
docker network create --driver bridge mynetwork1
docker network create --driver bridge mynetwork2
次に、コマンドを使用して、これらの作成されたネットワークのそれぞれで2つのコンテナーを実行しました。
docker run --net=mynetwork1 -it name=mynet1container1 mycontainerimage
docker run --net=mynetwork1 -it name=mynet1container2 mycontainerimage
docker run --net=mynetwork2 -it name=mynet2container1 mycontainerimage
docker run --net=mynetwork2 -it name=mynet2container2 mycontainerimage
次に、を使用して作成されたネットワークから、各コンテナのIPアドレスを特定しました。
docker network inspect mynetwork1
docker network inspect mynetwork2
それらを使用して、同じネットワーク内のコンテナー間で通信することはできましたが、ネットワークを介してコンテナー間で通信することはできませんでした。同じネットワークにコンテナを追加するだけで通信が可能でした。
どうもありがとう...
Iptablesはそのようなパケットをドロップするため、異なるネットワーク内のコンテナは相互に通信できません。これは、フィルターテーブルのDOCKER-ISOLATION-STAGE-1チェーンとDOCKER-ISOLATION-STAGE-2チェーンに表示されます。
Sudo iptables -t filter -vL
ルールをDOCKER-USERチェーンに追加して、異なるネットワーク間の通信を可能にすることができます。上記のシナリオでは、次のコマンドにより、mynetwork1の任意のコンテナーがmynetwork2の任意のコンテナーと通信できるようになります。
ネットワークのブリッジインターフェイス名(mynetwork1およびmynetwork2)を最初に見つける必要があります。それらの名前は通常br-07d0d51191dfまたはbr-85f51d1cfbf6のようになり、コマンド「ifconfig」または「iplinkshow」を使用して見つけることができます。複数のブリッジインターフェイスがあるため、対象のネットワークに適切なものを識別するには、ブリッジインターフェイスのinetアドレス(ifconfigに表示)がコマンド 'docker network inspectmynetwork1'に表示されるサブネットアドレスと一致する必要があります。
Sudo iptables -I DOCKER-USER -i br-########1 -o br-########2 -j ACCEPT
Sudo iptables -I DOCKER-USER -i br-########2 -o br-########1 -j ACCEPT
ルールは、特定のIP間の通信のみを許可するように微調整できます。例えば、
Sudo iptables -I DOCKER-USER -i br-########1 -o br-########2 -s 172.17.0.2 -d 172.19.0.2 -j ACCEPT
Sudo iptables -I DOCKER-USER -i br-########2 -o br-########1 -s 172.19.0.2 -d 172.17.0.2 -j ACCEPT
同じネットワーク上にないため、2つのコンテナは通信できません。
1つのコンテナを他のネットワークオーバーレイに接続します(これは、現在の制約を満たさない場合があります)。
3番目のネットワークを作成し、両方のコンテナーをこのネットワークに接続します。
コマンド docker run
オプションのオカレンスを1つだけ受け入れる--net
、あなたがしなければならないことはdocker start
コンテナ、次にdocker network connect
共有ネットワークにそれらを。
あなたが探している答えはここにあります: https://stackoverflow.com/a/34038381/5321002
DockerDocsによるとContainers can only communicate within networks but not across networks
コンテナを2つのネットワークに接続して、その方法で通信できるようにすることができます。
編集:その時点で、そもそもなぜ2つのネットワークがあるのか。
リンクは次のとおりです。
https://docs.docker.com/engine/userguide/networking/dockernetworks/
-ブルース