Skip to main content

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 Dockerun court-circuiteréseau UFWbridge dédié par projet (nommé <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).

    pour
     gérer
    1.2 EXPOSE vs ports:
    DirectiveEffet réelPortée
    EXPOSE (Dockerfile)Documentation uniquement, aucun binding réseau réelN/A
    expose: (compose)Idem, informatifN/A
    ports: (compose)Publie réellement le routageport dessur conteneurs.une
  • interface du Priorité des chaîneshost via NAT
  • Host + extérieur
     
    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 FORWARDINPUT avantgérée quepar UFWUFW.

    ne puisse traiter les paquets.
  • Conséquence : Même si un port publié via 8211ports: est 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.

    web
    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
    dans votre fichier docker-compose.yml.
  • Bon reflex : Éviter de renseigner la propriété ports: dans les docker compose pour laisser le port fermer de l'extérieur.

     


    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. 

    Le cas "Reverse Proxy" : Pour les services derrière le Reverse Proxy (Apache, nginx, traefik, etc..)
    Empêchez Docker d'exposer ces services sur Internet. Liez-les uniquement à l'interface locale (127.0.0.1).
    Les requêtes passeront par le proxy (80/443), et personne ne pourra contourner le proxy en tapant directement le port du service.

     

    ports:
      - "127.0.0.1:8080:8080" # Invisible de l'extérieur, accessible par le pr