KYOSH1RO

◀ Cheatsheets / DOCKER & CONTAINERS

Docker Networking — Réseaux de conteneurs

Comprendre et dépanner les réseaux Docker : bridge, overlay, macvlan, DNS interne, ports publiés, réseaux Compose, isolation et inspection entre conteneurs.

Filtrer
Docker connecte les conteneurs à des réseaux virtuels gérés par des drivers. Le choix du driver détermine si les conteneurs communiquent seulement sur un hôte, entre plusieurs hôtes ou directement avec le réseau physique.

Les principaux drivers

3 cmds
● bridge : conteneurs présents sur le même moteur Docker
● host : partage direct de la pile réseau de l'hôte, sans isolation réseau
● none : aucune connectivité réseau configurée
● overlay : réseau distribué entre plusieurs hôtes d'un Swarm
● macvlan : chaque conteneur apparaît avec sa propre adresse MAC sur le réseau physique
● ipvlan : intégration au réseau physique avec moins d'adresses MAC
docker network lsLister les réseaux
docker network inspect bridgeInspecter le bridge par défaut
docker infoVérifier les plugins réseau disponibles

Bridge par défaut et bridge utilisateur

5 cmds
Le réseau bridge par défaut existe automatiquement. Un bridge créé par l'utilisateur apporte une meilleure isolation et une résolution DNS automatique par nom de conteneur.
docker network create app-netCréer un bridge utilisateur
docker run -d --name db --network app-net postgres:17Lancer la base sur ce réseau
docker run -d --name web --network app-net nginx:alpineLancer le web sur le même réseau
docker exec web getent hosts dbRésoudre le nom du conteneur db
docker network inspect app-netVérifier les membres et l'IPAM
Préférer les noms de services aux adresses IP de conteneurs. Les IP peuvent changer après une recréation, tandis que le DNS du réseau suit les conteneurs.

Ports exposés et ports publiés

4 cmds
docker run -d --name web -p 8080:80 nginx:alpinePublier sur toutes les interfaces de l'hôte
docker run -d --name web-local -p 127.0.0.1:8081:80 nginx:alpineLimiter à localhost
docker port webVoir les associations de ports
docker inspect -f '{{json .NetworkSettings.Ports}}' webInspecter les ports en JSON
● EXPOSE documente un port dans l'image mais ne le publie pas
● p 8080:80 publie le port 80 du conteneur sur le port 8080 de l'hôte
● sans adresse hôte, Docker publie généralement sur toutes les interfaces
● les conteneurs d'un même réseau communiquent directement sans publier leurs ports

Créer un bridge avec un sous-réseau précis

3 cmds
docker network create --driver bridge --subnet 172.30.0.0/16 --gateway 172.30.0.1 app-net
docker run -d --name api --network app-net --ip 172.30.0.10 nginx:alpine
docker network inspect app-net
Éviter les chevauchements avec le LAN, le VPN, les autres réseaux Docker et les routes cloud. Un chevauchement peut provoquer des destinations injoignables ou envoyées vers la mauvaise interface.

Connecter et déconnecter un conteneur

4 cmds
docker network connect app-net conteneurAjouter un réseau à chaud
docker network connect --alias database app-net dbAjouter un alias DNS
docker network disconnect app-net conteneurRetirer le réseau
docker inspect -f '{{json .NetworkSettings.Networks}}' conteneurVoir tous ses réseaux

Réseaux dans Docker Compose

22 cmds
services:
web:
image: nginx:alpine
networks:
- frontend
api:
image: mon-api:latest
networks:
- frontend
- backend
db:
image: postgres:17
networks:
- backend
networks:
frontend:
backend:
internal: true
docker compose configAfficher la configuration finale
docker compose up -dCréer les réseaux et services
docker compose psVoir l'état des services
docker network ls --filter label=com.docker.compose.projectRetrouver les réseaux Compose
Un réseau internal: true isole les services de l'accès externe direct. Il convient bien à un réseau de base de données, tout en laissant l'API reliée à deux réseaux.

Tester le DNS et la connectivité

5 cmds
docker exec api getent hosts dbRésolution DNS interne
docker exec api ping -c 3 dbTest ICMP si ping est installé
docker exec api sh -c 'wget -S -O- http://web 2>&1 | head'Tester HTTP
docker run --rm --network app-net alpine getent hosts apiConteneur de diagnostic temporaire
docker run --rm --network app-net alpine sh -c 'apk add --no-cache curl >/dev/null && curl -I http://web'Tester HTTP avec curl
Une image minimale ne contient pas forcément ping, curl, dig ou ss. L'absence de la commande ne prouve pas une panne réseau : utiliser un conteneur temporaire de diagnostic.

Inspecter les interfaces et routes

6 cmds
docker exec conteneur ip addressInterfaces du conteneur
docker exec conteneur ip routeTable de routage
docker exec conteneur cat /etc/resolv.confDNS configuré
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}} {{.Gateway}}{{end}}' conteneurIP et passerelle
ip link show type bridgeBridges Linux de l'hôte
ip routeRoutes de l'hôte

Overlay — plusieurs hôtes Docker

6 cmds
Le driver overlay relie plusieurs moteurs Docker membres du même Swarm. Même pour des conteneurs autonomes, le Swarm doit être initialisé et le réseau doit être attachable.
docker swarm init --advertise-addr 192.168.1.10
docker swarm join-token worker
docker network create -d overlay --attachable overlay-app
docker service create --name web --network overlay-app --replicas 2 nginx:alpine
docker network inspect overlay-app
● 2377/tcp pour le plan de contrôle Swarm
● 7946/tcp et 7946/udp pour la communication entre nœuds
● 4789/udp pour le trafic overlay
● les hôtes doivent se joindre par leurs adresses appropriées
Chiffrement du trafic overlay
docker network create -d overlay --opt encrypted --attachable overlay-secure

macvlan — conteneurs sur le LAN

8 cmds
docker network create -d macvlan --subnet 192.168.1.0/24 --gateway 192.168.1.1 -o parent=eth0 macvlan-lan
docker run -d --name dns --network macvlan-lan --ip 192.168.1.50 nginx:alpine
docker network inspect macvlan-lan
● Réserver les adresses utilisées hors de la plage DHCP
● Vérifier que le réseau accepte plusieurs adresses MAC sur le port physique
● Adapter l'interface parent, le sous-réseau et la passerelle
● Prévoir le comportement particulier entre l'hôte et ses conteneurs macvlan
Par conception Linux, l'hôte ne communique généralement pas directement avec ses propres conteneurs macvlan via l'interface parent. Une interface macvlan supplémentaire côté hôte est nécessaire si ce trafic doit fonctionner.
Interface macvlan côté hôte
sudo ip link add macvlan-host link eth0 type macvlan mode bridge
sudo ip addr add 192.168.1.49/32 dev macvlan-host
sudo ip link set macvlan-host up
sudo ip route add 192.168.1.50/32 dev macvlan-host
ping -c 3 192.168.1.50

Mode host et mode none

2 cmds
docker run --rm --network host nginx:alpinePartager le réseau de l'hôte
docker run --rm --network none alpine ip addressConteneur sans réseau externe
Le mode host réduit l'isolation et les options de publication de ports ne s'appliquent pas normalement. L'utiliser uniquement lorsque le besoin est clair.

Isolation et sécurité

3 cmds
docker network create --internal backend-netRéseau sans accès externe normal
docker run -d --name db --network backend-net postgres:17
docker network inspect backend-net
● Ne publier que les ports réellement nécessaires
● Lier les interfaces d'administration à 127.0.0.1 ou à une IP privée
● Séparer frontend, backend et base de données sur des réseaux distincts
● Ne pas considérer un réseau Docker comme une frontière de sécurité absolue
● Maintenir les images et le moteur Docker à jour

Règles pare-feu créées par Docker

4 cmds
sudo nft list ruleset | lessVoir le ruleset Netfilter complet
sudo iptables -S DOCKER-USERChaîne utilisateur avec le backend iptables
sudo iptables -t nat -SRègles NAT de publication
sudo conntrack -LConnexions suivies
Les ports publiés traversent les règles de forwarding et de NAT créées par Docker. Tester le filtrage depuis une autre machine et ne pas se limiter à la policy INPUT de l'hôte.

Dépannage méthodique

7 cmds
docker ps --format 'table {{.Names}}\t{{.Ports}}\t{{.Networks}}'Vue d'ensemble
docker network inspect reseauMembres, sous-réseau et options
docker inspect conteneurConfiguration complète
docker exec conteneur getent hosts serviceDNS interne
docker exec conteneur ip routePasserelle et routes
docker logs --tail 100 conteneurErreur applicative éventuelle
sudo tcpdump -ni any port 8080Observer le trafic sur l'hôte

Nettoyage

3 cmds
docker network rm reseauSupprimer un réseau inutilisé précis
docker network pruneSupprimer tous les réseaux inutilisés après confirmation
docker network ls --filter dangling=truePrévisualiser les réseaux inutilisés
Un réseau ne peut pas être supprimé tant que des conteneurs y sont encore connectés. Inspecter ses membres avant de forcer des changements.

Aucune commande ne correspond à ce filtre.