Docker: Subnetz-Clients können kein anderes Subnetz anpingen

Docker: Subnetz-Clients können kein anderes Subnetz anpingen

Ich habe damit ein kleines Netzwerk mit 2 Clients und 2 Routern erstellt Dockerfile:

FROM ubuntu:18.04

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

Die Container wurden mit folgendem Skript erstellt:

#!/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

Alles ist in Ordnung, aber PC1ich kann nicht pingen PC2. Dies ist kein Problem bei lxc, wo dieselbe Netzwerkkonfiguration vorgenommen wird PC1und PC2kommuniziert werden kann.

Warum passiert das?

Docker-Version:Docker version 18.06.1-ce, build e68fc7a

Aktualisieren:

Immer noch ohne gute Ergebnisse (ich weiß nicht, ob ich eine Konfiguration übersehen habe)

Docker-Version:Docker version 18.09.0, build 4d60db4

Antwort1

Dieser Befehl:

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

erstellt eine Brücke, die nicht mit anderen Netzwerken kommunizieren kann ( man docker-network-create):

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

Wenn Sie diese Option für alle Subnetze belassen, werden die Netzwerke zugänglich.

verwandte Informationen