
Я создал небольшую сеть с 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
Все хорошо, но PC1
не могу пинговать PC2
. Это не проблема в lxc
, где делается та же самая конфигурация сети, PC1
и PC2
можно общаться.
Почему это происходит?
Версия 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
Если оставить эту опцию для всех подсетей, сети станут доступными.