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. lxc동일한 네트워크 구성을 하고 PC1통신 이 가능한 에서는 문제가 되지 않습니다 PC2.

왜 이런 일이 발생합니까?

도커 버전:Docker version 18.06.1-ce, build e68fc7a

업데이트:

여전히 좋은 결과가 없습니다(누락된 구성이 있는지 모르겠습니다).

도커 버전: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

모든 서브넷에 대해 이 옵션을 그대로 두면 네트워크에 액세스할 수 있습니다.

관련 정보