Docker: サブネット クライアントが他のサブネットに ping できない

Docker: サブネット クライアントが他のサブネットに ping できない

私はこれを使って、2 つのクライアントと 2 つのルーターを備えた小さなネットワークを作成しましたDockerfile:

FROM ubuntu:18.04

RUN apt update && apt upgrade -y && apt install -y vim iputils-ping iproute2

コンテナは次のスクリプトを使用して作成されました。

#!/bin/bash

sudo docker build -t test02 .

sudo docker network create --internal --subnet=192.168.1.0/24 tunnel

sudo docker network create --internal --subnet=172.16.1.0/24 B1
sudo docker network create --internal --subnet=172.16.2.0/24 B2

sudo docker run --name R1 --hostname R1 --cap-add=ALL --net tunnel --ip="192.168.1.100" -dit test02

sudo docker run --name R2 --hostname R2 --cap-add=ALL --net tunnel --ip="192.168.1.200" -dit test02

sudo docker network connect --ip="172.16.1.254" B1 R1
sudo docker network connect --ip="172.16.2.254" B2 R2

sudo docker exec R1 ip route del default via 172.16.1.1

sudo docker exec R2 ip route del default via 172.16.2.1

sudo docker exec R1 ip route add 172.16.2.0/24 via 192.168.1.200

sudo docker exec R2 ip route add 172.16.1.0/24 via 192.168.1.100

sudo docker run --name PC1 --hostname PC1 --cap-add=ALL --net B1 --ip="172.16.1.2" -dit test02

sudo docker run --name PC2 --hostname PC2 --cap-add=ALL --net B2 --ip="172.16.2.2" -dit test02

sudo docker exec PC1 ip route del default via 172.16.1.1

sudo docker exec PC1 ip route add default via 172.16.1.254

sudo docker exec PC2 ip route del default via 172.16.2.1

sudo docker exec PC2 ip route add default via 172.16.2.254

すべて正常ですが、 にPC1ping できません。では、同じネットワーク構成を実行していて、とが通信できるため、PC2これは問題ではありません。lxcPC1PC2

なぜこのようなことが起こるのでしょうか?

Docker バージョン:Docker version 18.06.1-ce, build e68fc7a

アップデート:

まだ良い結果は出ていません(何か設定が足りないのか分かりません)

Docker バージョン:Docker version 18.09.0, build 4d60db4

答え1

このコマンド:

sudo docker network create --internal --subnet=192.168.1.0/24 tunnel

他のネットワークと通信できないブリッジを作成します ( man docker-network-create):

   --internal[=false]
       Restrict external access to the network

すべてのサブネットに対してこのオプションを残すと、ネットワークにアクセスできるようになります。

関連情報