5 votes

Routage entre différents réseaux Docker sur la même machine hôte

J'ai créé deux réseaux Docker.

docker network create --subnet=172.18.0.0/16 Docker_network_1
docker network create --subnet=172.19.0.0/16 Docker_network_2

Sur chacun d'eux, je fais tourner deux conteneurs différents :

docker run --rm -it --name Container_1 --net Docker_network_1  alpine /bin/sh
docker run --rm -it --name Container_2 --net Docker_network_2  alpine /bin/sh

Container_1 a une IP 172.18.0.2 alors que le conteneur_2 a un IP 172.19.0.2 .

Depuis le Container_1, je peux ping l'IP de l'interface du docker 172.19.0.1 qui appartient à Docker_network_2 mais je ne peux pas ping l'IP du Container_2 172.19.0.2 .

Je ne comprends pas pourquoi puisque le "routage" sur ma machine hôte semble correct :

#route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    1024   0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
172.18.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-ea28cf2d7108
172.19.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-244606ad6705

0 votes

Êtes-vous sûr que le conteneur_1 est sur le réseau Docker_2 ? D'après l'adresse IP, il semble être sur Docker_network_2.

0 votes

Merci, c'était une erreur de copier-coller. En effet, le conteneur_1 appartient au réseau Docker_network_1. Je ne suis toujours pas en mesure d'acheminer les paquets entre ces réseaux.

1 votes

Ne manipulez pas les règles Iptables de Docker, utilisez simplement la commande Docker appropriée pour relier les conteneurs entre eux, comme décrit ici, et Docker se chargera de la magie iptables pour vous. docs.docker.com/v1.5/articles/networking/

4voto

montjoy Points 156

Suivi de la réponse de l'utilisateur. Une façon un peu plus sûre de procéder est d'ajouter des règles pour permettre aux réseaux de se parler entre eux au lieu de tout balayer.

C'est ce qui a marché pour moi :

sudo iptables -I DOCKER-ISOLATION-STAGE-2 -o docker0 -i othernet -j ACCEPT
sudo iptables -I DOCKER-ISOLATION-STAGE-2 -o othernet -i docker0 -j ACCEPT

Je n'ai pas encore trouvé de moyen simple de le faire automatiquement.

1voto

lily Points 1

J'ai résolu le problème en supprimant DOCKER-ISOLATION que Docker définit dans iptables :

# iptables --flush DOCKER-ISOLATION

Je ne suis pas sûr que cette approche soit la bonne du point de vue de la sécurité, mais elle répond à mes besoins.

0voto

BMitch Points 4794

Les réseaux Docker ne sont pas conçus pour être routés entre eux, ils sont intentionnellement isolés afin que vous puissiez créer des groupes d'applications qui ne peuvent se parler qu'entre elles. Je soupçonne que cela est effectué dans les règles iptables, mais ne me citez pas sur ce point.

Vous pouvez toutefois ajouter un conteneur à plusieurs réseaux. Manuellement, cela se fait avec un docker network connect Docker_network_2 Container_1 après la création du conteneur (vous pouvez diviser la commande d'exécution en une commande de création et de démarrage si vous devez vous connecter au réseau avant le démarrage de votre point d'entrée).

Docker compose est utile pour relier plusieurs conteneurs à travers différents réseaux. Il vous permet de définir chacun des réseaux auxquels chaque conteneur appartient, éliminant ainsi la nécessité d'exécuter plusieurs applications docker network connect des commandes.

0 votes

En fait, en utilisant docker network connect Docker_network_2 Container_1 En effet, une nouvelle interface est créée dans le conteneur_1, qui est directement connectée au réseau Docker_2. Ce n'est pas ce que je recherche réellement. J'ai besoin que les paquets soient envoyés via l'interface de pont réseau "br-XX" associée au Docker_network.

1 votes

Toujours une bonne réponse, je ne savais pas pour docker network connect . Merci !

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X