⚠️ Traduction non officielle - Cette documentation est une traduction communautaire non officielle de Docker.

Éléments de niveau supérieur networks

Les réseaux permettent aux services de communiquer entre eux. Par défaut, Compose configure un réseau unique pour votre application. Chaque conteneur d'un service rejoint le réseau par défaut et est à la fois accessible par d'autres conteneurs sur ce réseau, et détectable par le nom du service. L'élément de niveau supérieur networks vous permet de configurer des réseaux nommés qui peuvent être réutilisés sur plusieurs services.

Pour utiliser un réseau à travers plusieurs services, vous devez explicitement accorder l'accès à chaque service en utilisant l'attribut networks dans l'élément de niveau supérieur services. L'élément de niveau supérieur networks a une syntaxe supplémentaire qui fournit un contrôle plus granulaire.

Exemples

Exemple de base

Dans l'exemple suivant, au moment de l'exécution, les réseaux front-tier et back-tier sont créés et le service frontend est connecté aux réseaux front-tier et back-tier.

services:
  frontend:
    image: example/webapp
    networks:
      - front-tier
      - back-tier

networks:
  front-tier:
  back-tier:

Exemple avancé

services:
  proxy:
    build: ./proxy
    networks:
      - frontend
  app:
    build: ./app
    networks:
      - frontend
      - backend
  db:
    image: postgres
    networks:
      - backend

networks:
  frontend:
    # Spécifier les options du pilote
    driver: bridge
    driver_opts:
      com.docker.network.bridge.host_binding_ipv4: "127.0.0.1"
  backend:
    # Utiliser un pilote personnalisé
    driver: custom-driver

L'exemple avancé montre un fichier Compose qui définit deux réseaux personnalisés. Le service proxy est isolé du service db, parce qu'ils ne partagent pas de réseau en commun. Seul app peut parler aux deux.

Le réseau par défaut

Quand un fichier Compose ne déclare pas de réseaux explicites, Compose utilise un réseau default implicite. Les services sans déclaration networks explicite sont connectés par Compose à ce réseau default :

services:
  some-service:
    image: foo

Cet exemple est en fait équivalent à :

services:
  some-service:
    image: foo
    networks:
      default: {}  
networks:
  default: {}      

Vous pouvez personnaliser le réseau default avec une déclaration explicite :

networks:
  default: 
    name: a_network # Utiliser un nom personnalisé
    driver_opts:    # passer des options au pilote pour la création de réseau
      com.docker.network.bridge.host_binding_ipv4: 127.0.0.1

Pour les options, voir la documentation Docker Engine.

Attributs

driver

driver spécifie quel pilote devrait être utilisé pour ce réseau. Compose retourne une erreur si le pilote n'est pas disponible sur la plateforme.

networks:
  db-data:
    driver: bridge

Pour plus d'informations sur les pilotes et options disponibles, voir Pilotes de réseau.

driver_opts

driver_opts spécifie une liste d'options comme paires clé-valeur à passer au pilote. Ces options sont dépendantes du pilote.

networks:
  frontend:
    driver: bridge
    driver_opts:
      com.docker.network.bridge.host_binding_ipv4: "127.0.0.1"

Consultez la documentation des pilotes de réseau pour plus d'informations.

attachable

Si attachable est défini à true, alors les conteneurs autonomes devraient pouvoir s'attacher à ce réseau, en plus des services. Si un conteneur autonome s'attache au réseau, il peut communiquer avec les services et autres conteneurs autonomes qui sont aussi attachés au réseau.

networks:
  mynet1:
    driver: overlay
    attachable: true

enable_ipv4

Requires: Docker Compose 2.33.1 and later

enable_ipv4 peut être utilisé pour désactiver l'assignation d'adresse IPv4.

  networks:
    ip6net:
      enable_ipv4: false
      enable_ipv6: true

enable_ipv6

enable_ipv6 active l'assignation d'adresse IPv6.

  networks:
    ip6net:
      enable_ipv6: true

external

Si défini à true :

  • external spécifie que le cycle de vie de ce réseau est maintenu en dehors de celui de l'application. Compose n'essaie pas de créer ces réseaux, et retourne une erreur si l'un n'existe pas.
  • Tous les autres attributs à part name sont non pertinents. Si Compose détecte un autre attribut, il rejette le fichier Compose comme invalide.

Dans l'exemple suivant, proxy est la passerelle vers le monde extérieur. Au lieu de tenter de créer un réseau, Compose interroge la plateforme pour un réseau existant simplement appelé outside et connecte les conteneurs du service proxy à celui-ci.

services:
  proxy:
    image: example/proxy
    networks:
      - outside
      - default
  app:
    image: example/app
    networks:
      - default

networks:
  outside:
    external: true

ipam

ipam spécifie une configuration IPAM personnalisée. C'est un objet avec plusieurs propriétés, chacune étant optionnelle :

  • driver : Pilote IPAM personnalisé, au lieu du pilote par défaut.
  • config : Une liste avec zéro ou plus éléments de configuration, chacun contenant :
    • subnet : Sous-réseau au format CIDR qui représente un segment de réseau
    • ip_range : Plage d'IPs depuis laquelle allouer les IPs de conteneur
    • gateway : Passerelle IPv4 ou IPv6 pour le sous-réseau maître
    • aux_addresses : Adresses IPv4 ou IPv6 auxiliaires utilisées par le pilote de réseau, comme mappage de nom d'hôte vers IP
  • options : Options spécifiques au pilote comme mappage clé-valeur.
networks:
  mynet1:
    ipam:
      driver: default
      config:
        - subnet: 172.28.0.0/16
          ip_range: 172.28.5.0/24
          gateway: 172.28.5.254
          aux_addresses:
            host1: 172.28.1.5
            host2: 172.28.1.6
            host3: 172.28.1.7
      options:
        foo: bar
        baz: "0"

internal

Par défaut, Compose fournit une connectivité externe aux réseaux. internal, quand défini à true, vous permet de créer un réseau isolé de l'extérieur.

labels

Ajouter des métadonnées aux conteneurs en utilisant labels. Vous pouvez utiliser soit un tableau soit un dictionnaire.

Il est recommandé d'utiliser la notation DNS inversée pour empêcher les étiquettes d'entrer en conflit avec celles utilisées par d'autres logiciels.

networks:
  mynet1:
    labels:
      com.example.description: "Réseau de transaction financière"
      com.example.department: "Finance"
      com.example.label-with-empty-value: ""
networks:
  mynet1:
    labels:
      - "com.example.description=Réseau de transaction financière"
      - "com.example.department=Finance"
      - "com.example.label-with-empty-value"

name

name définit un nom personnalisé pour ce réseau. Le champ name peut être utilisé pour référencer des réseaux qui contiennent des caractères spéciaux. Le nom est utilisé tel quel et ne sera pas délimité avec le nom du projet.

networks:
  network1:
    name: my-app-net

Il peut aussi être utilisé en conjonction avec la propriété external :

networks:
  network1:
    external: true
    name: "${NETWORK_ID}"

Additional resources

For more examples, see Networking in Compose.