Gestion du réseau et des ports Docker
Cette page est dédier à la question suivante :
Comment bien configuré ses conteneurs sur le réseau ?
Ce qu'il faut savoir
Portée : Docker Compose, hosts Linux avec UFW comme pare-feu, reverse proxy type Traefik/Caddy/nginx.
Objectif : standardiser une architecture réseau 100 % maîtrisée sur toutes les stacks compose.
1. Comportement par défaut de Docker
1.1 Réseaux créés automatiquement
Par
défaut,docker compose up crée <nom_projet>_default), distinct du bridge docker0 historique. Tous les services d'un même fichier compose sont attachés à ce réseau et se résolvent entre eux par nom de service (DNS interne Docker), sans avoir besoin de publier le moindre port.
➡️ Conséquence clé : Dockerla manipulecommunication directementinter-conteneurs lesne règlesnécessite jamais . iptablesports:ports: sousne sert qu'à exposer un service en dehors du host Docker (vers le capotLAN/WAN).
gérer
1.2 EXPOSE vs ports:
EXPOSE (Dockerfile)
Documentation uniquement, aucun binding réseau réel
N/A
expose: (compose)
Idem, informatif
N/A
ports: (compose)
Publie réellement le 1.3 Docker et iptables : le piège UFW
C'est le point le plus critique en environnement Ops/DevSec.
Quand un conteneur publie un port avec ports:, Docker insère sesautomatiquement des règles dans les chaînes DOCKER et DOCKER-USER de la table nat/filter d'iptables — en amont de la chaîne FORWARDINPUTavantgérée quepar UFWUFW.
Conséquence : Même si un port publié via est 8211ports:bloquéaccessible dansdepuis UFW,l'extérieur même si UFW le bloque explicitement.
UFW ne voit jamais passer ce trafic car Docker l'ouvreroute directement survia leNAT/FORWARD.
Trafic dèsentrant que→ vousPREROUTING écrivez(Docker DNAT) → FORWARD → DOCKER-USER → DOCKER → conteneur
↑
UFW (INPUT) n'intercepte PAS ce chemin
2. Le comportement de ports: en détail
2.1 Syntaxes
ports:
- "8211:8211"8080:80" # host:container — bind 0.0.0.0 (TOUTES interfaces) par défaut
- "127.0.0.1:8080:80" # bind explicite localhost uniquement
- "10.10.10.1:8080:80" # bind sur une IP précise (ex: interface WireGuard)
- "8080:80/udp" # protocole explicite
docker-compose.ymlports:
Quelle configuration utiliser ?
Avec Docker il existe plusieurs moyens de configurer l'accès aux conteneurs. Chaque solution répond à un besoin bien spécifique.
127.0.0.1).
ports:
- "127.0.0.1:8080:8080" # Invisible de l'extérieur, accessible par le pr