---
title: Réseaux Docker
description: Relier les services avec un réseau privé et la résolution DNS interne.
---

## Des conteneurs isolés

Chaque conteneur possède sa propre pile réseau. Pour que le backend puisse joindre PostgreSQL et que Nginx puisse joindre le frontend, leurs conteneurs doivent partager un réseau.

## Réseau bridge et noms de services

Compose crée un réseau et y attache les services. Sur ce réseau, Docker fournit un DNS interne : chaque service est joignable avec son nom.

```yaml
networks:
  app-network:
    driver: bridge

services:
  postgres:
    networks:
      - app-network

  backend:
    networks:
      - app-network
    environment:
      POSTGRES_HOST: postgres
      MINIO_HOST: minio
      SMTP_HOST: mailpit
```

Le backend se connecte à la base avec l'hôte `postgres`. Docker résout ce nom vers l'adresse interne du conteneur correspondant.

Les adresses IP peuvent changer à chaque redémarrage ; les noms de services restent stables.

<Callout title="localhost reste local" type="warning">
  À l'intérieur d'un conteneur, localhost désigne ce même conteneur. Pour joindre un autre service, utilise son nom Compose, jamais localhost.
</Callout>

## Isolation entre les stacks

Deux projets Compose distincts créent chacun leur réseau bridge. Leurs services ne se voient pas par défaut.

Cette isolation permet notamment de lancer plusieurs stacks de tests en parallèle sans qu'elles communiquent entre elles.

## Segmenter l'application

Un service peut appartenir à plusieurs réseaux. On peut ainsi exposer Nginx au réseau frontal tout en gardant PostgreSQL uniquement sur un réseau interne :

```yaml
networks:
  public:
  private:

services:
  nginx:
    networks:
      - public
      - private

  backend:
    networks:
      - private

  postgres:
    networks:
      - private
```

Seuls les services partageant un réseau peuvent communiquer directement.
