Docker: clientes de sub-rede não podem executar ping em outra sub-rede

Docker: clientes de sub-rede não podem executar ping em outra sub-rede

Criei uma pequena rede com 2 clientes e 2 roteadores com isto Dockerfile:

FROM ubuntu:18.04

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

Os containers foram criados com o seguinte script:

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

Está tudo bem, mas PC1não consigo fazer ping PC2. Isso não é um problema em lxcque você pode fazer a mesma configuração de rede PC1e PC2se comunicar.

Por que isso acontece?

Versão Docker:Docker version 18.06.1-ce, build e68fc7a

Atualizar:

Ainda sem bons resultados (não sei se falta alguma configuração)

Versão Docker:Docker version 18.09.0, build 4d60db4

Responder1

Este comando:

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

cria uma ponte que não consegue se comunicar com outras redes ( man docker-network-create):

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

Deixar esta opção para todas as sub-redes torna as redes acessíveis.

informação relacionada