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

Pilote de réseau Host

Si vous utilisez le mode réseau host pour un conteneur, la pile réseau de ce conteneur n'est pas isolée de l'hôte Docker (le conteneur partage l'espace de noms réseau de l'hôte), et le conteneur n'obtient pas sa propre adresse IP allouée. Par exemple, si vous exécutez un conteneur qui se lie au port 80 et que vous utilisez le réseau host, l'application du conteneur est disponible sur le port 80 sur l'adresse IP de l'hôte.

Note

Étant donné que le conteneur n'a pas sa propre adresse IP lors de l'utilisation du mode réseau host, le mappage de port ne prend pas effet, et les options -p, --publish, -P, et --publish-all sont ignorées, produisant un avertissement à la place :

WARNING: Published ports are discarded when using host network mode

Le mode réseau host peut être utile pour les cas d'usage suivants :

  • Pour optimiser les performances
  • Dans des situations où un conteneur doit gérer une large gamme de ports

C'est parce qu'il ne nécessite pas de traduction d'adresse réseau (NAT), et aucun "userland-proxy" n'est créé pour chaque port.

Le pilote de réseau host est pris en charge sur Docker Engine (Linux uniquement) et Docker Desktop version 4.34 et ultérieures.

Vous pouvez aussi utiliser un réseau host pour un service swarm, en passant --network host à la commande docker service create. Dans ce cas, le trafic de contrôle (trafic lié à la gestion du swarm et du service) est toujours envoyé à travers un réseau overlay, mais les conteneurs de service swarm individuels envoient des données en utilisant le réseau hôte et les ports du démon Docker. Cela crée quelques limitations supplémentaires. Par exemple, si un conteneur de service se lie au port 80, un seul conteneur de service peut s'exécuter sur un nœud swarm donné.

Docker Desktop

Le réseau host est pris en charge sur Docker Desktop version 4.34 et ultérieures. Pour activer cette fonctionnalité :

  1. Connectez-vous à votre compte Docker dans Docker Desktop.
  2. Naviguez vers Settings.
  3. Sous l'onglet Resources, sélectionnez Network.
  4. Cochez l'option Enable host networking.
  5. Sélectionnez Apply and restart.

Cette fonctionnalité fonctionne dans les deux directions. Cela signifie que vous pouvez accéder à un serveur qui s'exécute dans un conteneur depuis votre hôte et vous pouvez accéder aux serveurs s'exécutant sur votre hôte depuis n'importe quel conteneur qui est démarré avec le réseau host activé. TCP ainsi qu'UDP sont pris en charge comme protocoles de communication.

Exemples

La commande suivante démarre netcat dans un conteneur qui écoute sur le port 8000 :

$ docker run --rm -it --net=host nicolaka/netshoot nc -lkv 0.0.0.0 8000

Le port 8000 sera alors disponible sur l'hôte et vous pouvez vous y connecter avec la commande suivante depuis un autre terminal :

$ nc localhost 8000

Ce que vous tapez ici apparaîtra alors sur le terminal où le conteneur s'exécute.

Pour accéder à un service s'exécutant sur l'hôte depuis le conteneur, vous pouvez démarrer un conteneur avec le réseau host activé avec cette commande :

$ docker run --rm -it --net=host nicolaka/netshoot

Si vous voulez ensuite accéder à un service sur votre hôte depuis le conteneur (dans cet exemple un serveur web s'exécutant sur le port 80), vous pouvez le faire comme ceci :

$ nc localhost 80

Limitations

  • Les processus à l'intérieur du conteneur ne peuvent pas se lier aux adresses IP de l'hôte car le conteneur n'a pas d'accès direct aux interfaces de l'hôte.
  • La fonctionnalité de réseau host de Docker Desktop fonctionne sur la couche 4. Cela signifie que contrairement à Docker sur Linux, les protocoles réseau qui opèrent en dessous de TCP ou UDP ne sont pas pris en charge.
  • Cette fonctionnalité ne fonctionne pas avec l'Isolation de Conteneur Améliorée activée, puisque isoler vos conteneurs de l'hôte et leur permettre d'accéder au réseau hôte se contredisent.
  • Seuls les conteneurs Linux sont pris en charge. Le réseau host ne fonctionne pas avec les conteneurs Windows.

Étapes suivantes