Aller au contenu

Docker : le réseau

Les conteneurs communiquent entre eux et avec l’extérieur grâce aux réseaux Docker. Les exemples utilisent des noms génériques (monreseau, web).

Pilote Comportement
bridge Réseau privé interne à la machine (défaut)
host Le conteneur partage le réseau de l’hôte, sans isolation (Linux)
none Aucun réseau
overlay Réseau multi-machines (Docker Swarm)

Sur le réseau bridge par défaut, les conteneurs se joignent seulement par adresse IP. Sur un réseau défini par l’utilisateur, ils se joignent aussi par leur nom.

Fenêtre de terminal
docker network ls # liste les réseaux
docker network create monreseau # crée un réseau bridge
docker network create --subnet 172.28.0.0/16 monreseau # plage d'adresses imposée
docker network inspect monreseau # détail (conteneurs connectés, adresses)
docker network rm monreseau # supprime
docker network prune # supprime les réseaux inutilisés
Fenêtre de terminal
docker run -d --name api --network monreseau monapp:1.0
docker run -d --name web --network monreseau nginx:alpine
docker exec web wget -qO- http://api:3000 # le nom « api » est résolu
docker network connect monreseau db # ajoute un conteneur existant
docker network connect --alias base monreseau db # avec un alias DNS
docker network disconnect monreseau db

Un port n’est accessible depuis l’extérieur que s’il est publié.

Fenêtre de terminal
docker run -d -p 8080:80 nginx:alpine # port 8080 de l'hôte vers 80 du conteneur
docker run -d -p 127.0.0.1:8080:80 nginx:alpine # accessible uniquement depuis la machine locale
docker run -d -p 8080:80/udp monapp:1.0 # protocole UDP
docker run -d -P nginx:alpine # publie les ports exposés sur des ports aléatoires
docker port web # affiche les ports publiés
Fenêtre de terminal
docker run --dns 1.1.1.1 monapp:1.0 # serveur DNS précis
docker run --add-host base.local:192.168.1.50 monapp:1.0 # entrée dans /etc/hosts
docker run --hostname monapp monapp:1.0
Fenêtre de terminal
docker network inspect monreseau # le conteneur est-il bien connecté ?
docker exec web ping -c 3 api # joindre un autre conteneur (si ping est présent)
docker exec web nslookup api # tester la résolution de noms
docker port web # le port est-il publié ?
docker logs web # l'application écoute-t-elle sur 0.0.0.0 ?

Une application qui n’écoute que sur 127.0.0.1 dans le conteneur n’est pas joignable de l’extérieur : elle doit écouter sur 0.0.0.0.