Ce que j'essaie de faire
J'essaie de rendre mon conteneur disponible pour le réseau à tous les appareils, pas seulement à l'hôte Docker.
Information
- Mon sous-réseau est le 9.158.143.0/24.
- ma passerelle est 9.1158.143.254
- mon IP d'hôte docker est 9.158.143.52 interface primaire (ens160)
- et l'IP de mon conteneur est 9.158.143.65
- docker-pid est l'identifiant du processus docker
- l'identifiant du docker est l'ip du docker
Ce que j'essaie de faire
J'essaie de rendre mon conteneur disponible pour le réseau à tous les appareils, pas seulement à l'hôte Docker.
Je veux que la configuration du docker soit telle que l'on puisse accéder au docker (ssh dans mon cas) de n'importe où dans mon réseau.
Étapes suivies jusqu'à présent
-
Commencez par créer un nouveau périphérique de pont.
-
brctl addbr br-em1
-
ip link set br-em1 up
-
-
ajouter ce dispositif à votre pont
- brctl addif br-em1 ens160
-
Configurer le pont avec l'adresse qui appartenait à ens160
-
ip addr del 9.158.143.52/24 dev ens160
-
ip addr add 9.158.143.52/24 dev br-em1
-
-
déplacer la route par défaut vers le pont
- ip route del default
- ip route add default via 9.158.143.254 dev br-em1
Jusqu'à ce point, tout fonctionne. L'hôte docker a une connectivité réseau.
-
docker run -itd --name web ubuntu
-
Créer une paire d'interfaces veth :
- ip link add web-int type veth peer name web-ext
-
brctl addif br-em1 web-ext
-
Et ajoutez l'interface web-int à l'espace de nom du conteneur :
- ip link set netns $(docker-pid web) dev web-int
-
nsenter -t $(docker-pid web) -n ip link set web-int up
-
nsenter -t $(docker-pid web) -n ip addr add 9.158.143.65/24 dev web-int
Jusqu'à présent, veth est créé dans un conteneur docker et Internet fonctionne dans le conteneur.
-
nsenter -t $(docker-pid web) -n ip route del default
-
nsenter -t $(docker-pid web) -n ip route add default via 9.158.143.254 dev web-int
Le problème
Ce sont les étapes suivies. Après les 2 dernières étapes, l'Internet cesse de fonctionner dans le conteneur. Je ne suis pas capable d'envoyer un ping à la machine hôte du docker à partir d'une autre machine du réseau (qui fonctionnait auparavant).
Y a-t-il une règle iptables qui doit être ajoutée en plus de ces étapes ? Si oui, veuillez m'aider.
PS : mon ip de docker0 est 172.17.0.1 Lien utilisé : http://blog.oddbit.com/2014/08/11/four-ways-to-connect-a-docker/ (avec des dispositifs de pontage linux)
L'image Ubuntu utilisée a un service ssh opérationnel.