Контейнеры в разных сетях не могут общаться друг с другом, потому что iptables отбрасывает такие пакеты. Это показано в цепочках DOCKER-ISOLATION-STAGE-1 и DOCKER-ISOLATION-STAGE-2 в таблице фильтров.
sudo iptables -t фильтр -vL
В цепочку DOCKER-USER можно добавить правила, чтобы обеспечить связь между разными сетями. В приведенном выше сценарии следующие команды позволят ЛЮБОМУ контейнеру в mynetwork1 взаимодействовать с ЛЮБЫМИ контейнерами в mynetwork2.
Сначала необходимо найти имена интерфейсов моста сети (mynetwork1 и mynetwork2).Их имена обычно выглядят как br-07d0d51191df или br-85f51d1cfbf6, и их можно найти с помощью команды «ifconfig» или «ip link show». Поскольку существует несколько интерфейсов моста, чтобы определить правильные для интересующих сетей, адрес inet интерфейса моста (показанный в ifconfig) должен соответствовать адресу подсети, указанному в команде «docker network inspect mynetwork1».
sudo iptables -I DOCKER-USER -i br-########1 -o br-########2 -j ПРИНЯТЬ
sudo iptables -I DOCKER-USER -i br-########2 -o br-########1 -j ПРИНЯТЬ
Правила можно настроить таким образом, чтобы разрешить связь только между определенными IP-адресами. Например,
sudo iptables -I DOCKER-USER -i br-#########1 -o br-########2 -s 172.17.0.2 -d 172.19.0.2 -j ПРИНЯТЬ
sudo iptables -I DOCKER-USER -i br-########2 -o br-########1 -s 172.19.0.2 -d 172.17.0.2 -j ПРИНЯТЬ