Options réseau avancées dans Windows
S’applique à : Windows Server 2025, Windows Server 2022, Windows Server 2019, Windows Server 2016
Plusieurs options de pilote réseau sont prises en charge pour tirer parti des capacités et fonctionnalités spécifiques à Windows.
Changer d’association incorporée avec des réseaux Docker
S’applique à tous les pilotes réseau
Vous pouvez tirer parti de Switch Embedded Teaming lors de la création de réseaux hôtes de conteneur destinés à Docker en spécifiant plusieurs cartes réseau (séparées par des virgules) avec l’option -o com.docker.network.windowsshim.interface
.
C:\> docker network create -d transparent -o com.docker.network.windowsshim.interface="Ethernet 2", "Ethernet 3" TeamedNet
Définir l’ID de réseau local virtuel pour un réseau
S'applique aux pilotes de réseau Transparent et L2Bridge
Pour définir un ID de réseau local virtuel pour un réseau, utilisez l’option -o com.docker.network.windowsshim.vlanid=<VLAN ID>
à la commande docker network create
. Par exemple, vous pouvez utiliser la commande suivante pour créer un réseau transparent avec un ID de réseau local virtuel de 11 :
C:\> docker network create -d transparent -o com.docker.network.windowsshim.vlanid=11 MyTransparentNetwork
Lorsque vous définissez l’ID de réseau local virtuel pour un réseau, vous définissez l’isolation du réseau local virtuel pour tous les points de terminaison de conteneur qui seront attachés à ce réseau.
Assurez-vous que votre adaptateur réseau hôte (physique) est en mode trunk pour permettre au trafic marqué d’être traité par le vSwitch, avec le port de la carte réseau virtuelle (point de terminaison de conteneur) en mode accès sur le VLAN approprié.
Spécifier la stratégie OutboundNAT pour un réseau
S’applique aux réseaux l2bridge
En règle générale, lorsque vous créez un réseau de conteneurs l2bridge
à l’aide de docker network create
, les points de terminaison de conteneur n’ont pas de stratégie HNS OutboundNAT appliquée, ce qui entraîne l’impossibilité d’atteindre le monde extérieur. Si vous créez un réseau, vous pouvez utiliser l’option -o com.docker.network.windowsshim.enable_outboundnat=<true|false>
pour appliquer la stratégie OUTBOUNDNAT HNS pour accorder aux conteneurs l’accès au monde extérieur :
C:\> docker network create -d l2bridge -o com.docker.network.windowsshim.enable_outboundnat=true MyL2BridgeNetwork
S'il existe un ensemble de destinations (par exemple, la connectivité de conteneur à conteneur est nécessaire) pour lesquelles nous ne voulons pas que la traduction d'adresses réseau se produise, nous devons également spécifier une liste d'exceptions :
C:\> docker network create -d l2bridge -o com.docker.network.windowsshim.enable_outboundnat=true -o com.docker.network.windowsshim.outboundnat_exceptions=10.244.10.0/24
Spécifier le nom d’un réseau au service HNS
S’applique à tous les pilotes réseau
En règle générale, lorsque vous créez un réseau de conteneurs à l’aide de docker network create
, le nom réseau que vous fournissez est utilisé par le service Docker, mais pas par le service HNS. Si vous créez un réseau, vous pouvez spécifier le nom qu’il reçoit par le service HNS à l’aide de l’option, -o com.docker.network.windowsshim.networkname=<network name>
à la commande docker network create
. Par exemple, vous pouvez utiliser la commande suivante pour créer un réseau transparent avec un nom spécifié au service HNS :
C:\> docker network create -d transparent -o com.docker.network.windowsshim.networkname=MyTransparentNetwork MyTransparentNetwork
Lier un réseau à une interface réseau spécifique
S’applique à tous les pilotes réseau à l’exception de « nat »
Pour lier un réseau (attaché via le commutateur virtuel Hyper-V) à une interface réseau spécifique, utilisez l’option -o com.docker.network.windowsshim.interface=<Interface>
à la commande docker network create
. Par exemple, vous pouvez utiliser la commande suivante pour créer un réseau transparent attaché à l’interface réseau « Ethernet 2 » :
C:\> docker network create -d transparent -o com.docker.network.windowsshim.interface="Ethernet 2" TransparentNet2
Remarque : la valeur de com.docker.network.windowsshim.interface est le Nom de la carte réseau, qui se trouve avec :
PS C:\> Get-NetAdapter
Spécifier le suffixe DNS et/ou les serveurs DNS d’un réseau
S’applique à tous les pilotes réseau
Utilisez l’option, -o com.docker.network.windowsshim.dnssuffix=<DNS SUFFIX>
pour spécifier le suffixe DNS d’un réseau et l’option, -o com.docker.network.windowsshim.dnsservers=<DNS SERVER/S>
pour spécifier les serveurs DNS d’un réseau. Par exemple, vous pouvez utiliser la commande suivante pour définir le suffixe DNS d’un réseau sur « example.com » et les serveurs DNS d’un réseau sur 4.4.4.4 et 8.8.8.8 :
C:\> docker network create -d transparent -o com.docker.network.windowsshim.dnssuffix=abc.com -o com.docker.network.windowsshim.dnsservers=4.4.4.4,8.8.8.8 MyTransparentNetwork
VFP
Pour plus d’informations, voir cet article.
Conseils & Insights
Voici une liste de conseils et d’insights pratiques, inspirés par des questions courantes sur la mise en réseau de conteneurs Windows que nous entendons de la communauté...
HNS nécessite que IPv6 soit activé sur les ordinateurs hôtes de conteneur
L'activation de IPv6 sur les hôtes de conteneur Windows est requise par HNS dans le cadre de KB4015217. Si vous rencontrez une erreur telle que celle ci-dessous, il est possible que IPv6 soit désactivé sur votre ordinateur hôte.
docker: Error response from daemon: container e15d99c06e312302f4d23747f2dfda4b11b92d488e8c5b53ab5e4331fd80636d encountered an error during CreateContainer: failure in a Windows system call: Element not found.
```output
We're working on platform changes to automatically detect/prevent this issue. Currently the following workaround can be used to ensure IPv6 is enabled on your host machine:
```output
C:\> reg delete HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters /v DisabledComponents /f
Conteneurs Linux sur Windows
NOUVEAU : Nous travaillons à rendre possible l’exécution de conteneurs Linux et Windows côte à côte sans la machine virtuelle Moby Linux. Consultez ce billet de blog sur les conteneurs Linux sur Windows (LCOW) pour plus d’informations. Voici comment commencer.
REMARQUE : LCOW déprécie la machine virtuelle Moby Linux et utilise le commutateur virtuel interne « nat » HNS par défaut.
Les machines virtuelles Moby Linux utilisent le commutateur DockerNAT avec Docker pour Windows (produit de Docker CE)
Docker pour Windows (le pilote Windows pour le moteur Docker CE) sur Windows 10 utilise un commutateur virtuel interne nommé « DockerNAT » pour connecter des machines virtuelles Moby Linux à l’hôte de conteneur. Les développeurs qui utilisent des machines virtuelles Moby Linux sur Windows doivent savoir que leurs hôtes utilisent le commutateur virtuel DockerNAT plutôt que le commutateur virtuel « nat » créé par le service HNS (qui est le commutateur par défaut utilisé pour les conteneurs Windows).
Pour utiliser DHCP pour l’attribution d’adresses IP sur un hôte de conteneur virtuel, activez MACAddressSpoofing
Si l’hôte de conteneur est virtualisé et que vous souhaitez utiliser DHCP pour l’attribution d'adresses IP, vous devez activer l'usurpation d'adresse MAC sur la carte réseau de la machine virtuelle. Sinon, l’hôte Hyper-V bloque le trafic réseau des conteneurs de la machine virtuelle avec plusieurs adresses MAC. Vous pouvez activer macAddressSpoofing avec cette commande PowerShell :
PS C:\> Get-VMNetworkAdapter -VMName ContainerHostVM | Set-VMNetworkAdapter -MacAddressSpoofing On
Si vous exécutez VMware comme hyperviseur, vous devez activer le mode promiscueux pour que cela fonctionne. Vous trouverez des détails ici
Création de plusieurs réseaux transparents sur un seul hôte de conteneur
Si vous souhaitez créer plusieurs réseaux transparents, vous devez spécifier la carte réseau (virtuelle) à laquelle la carte réseau externe Hyper-V Commutateur virtuel doit être liée. Pour spécifier l’interface d’un réseau, utilisez la syntaxe suivante :
# General syntax:
C:\> docker network create -d transparent -o com.docker.network.windowsshim.interface=<INTERFACE NAME> <NETWORK NAME>
# Example:
C:\> docker network create -d transparent -o com.docker.network.windowsshim.interface="Ethernet 2" myTransparent2
N’oubliez pas de spécifier --subnet et --gateway lors de l’utilisation d’une affectation IP statique
Lors de l’utilisation de l’attribution d’adresses IP statiques, vous devez d’abord vous assurer que les paramètres --subnet et --gateway sont spécifiés lors de la création du réseau. Le sous-réseau et l’adresse IP de passerelle doivent être identiques aux paramètres réseau de l’hôte de conteneur, c’est-à-dire le réseau physique. Par exemple, voici comment créer un réseau transparent, puis exécuter un point de terminaison sur ce réseau à l’aide de l’affectation d’adresses IP statiques :
# Example: Create a transparent network using static IP assignment
# A network create command for a transparent container network corresponding to the physical network with IP prefix 10.123.174.0/23
C:\> docker network create -d transparent --subnet=10.123.174.0/23 --gateway=10.123.174.1 MyTransparentNet
# Run a container attached to MyTransparentNet
C:\> docker run -it --network=MyTransparentNet --ip=10.123.174.105 windowsservercore cmd
Attribution IP DHCP non prise en charge avec les réseaux L2Bridge
Seule l’attribution d’adresses IP statiques est prise en charge avec les réseaux de conteneurs créés à l’aide du pilote l2bridge. Comme indiqué ci-dessus, n’oubliez pas d’utiliser les paramètres --subnet et --gateway pour créer un réseau configuré pour l’attribution d’adresses IP statiques.
Les réseaux qui tirent parti du commutateur virtuel externe doivent chacun avoir leur propre carte réseau
Notez que si plusieurs réseaux qui utilisent un commutateur virtuel externe pour la connectivité (par exemple, Transparent, L2 Bridge, L2 Transparent) sont créés sur le même hôte de conteneur, chacun d’eux nécessite sa propre carte réseau.
Attribution d'IP sur les conteneurs arrêtés et en cours d'exécution
L’attribution d’adresses IP statiques est effectuée directement sur la carte réseau du conteneur et doit être effectuée uniquement lorsque le conteneur est dans un état ARRÊTÉ. L’ajout à chaud de cartes réseau de conteneur ou les modifications apportées à la pile réseau ne sont pas pris en charge (dans Windows Server 2016) pendant l’exécution du conteneur.
Le commutateur virtuel existant (non visible par Docker) peut bloquer la création de réseau transparent
Si vous rencontrez une erreur lors de la création d’un réseau transparent, il est possible qu’il existe un commutateur virtuel externe sur votre système qui n’a pas été détecté automatiquement par Docker et empêche donc le réseau transparent d’être lié à la carte réseau externe de votre hôte de conteneur.
Lors de la création d’un réseau transparent, Docker crée un commutateur virtuel externe pour le réseau, puis tente de lier le commutateur à une carte réseau (externe) : la carte peut être une carte réseau de machine virtuelle ou la carte réseau physique. Si un commutateur virtuel a déjà été créé sur l’hôte de conteneur, et qu’il est visible par Docker, le moteur Docker Windows utilise ce commutateur au lieu de en créer un. Toutefois, si le commutateur virtuel qui a été créé hors bande (c’est-à-dire créé sur l’hôte de conteneur à l’aide de HYper-V Manager ou PowerShell) et n’est pas encore visible pour Docker, le moteur Docker Windows essaie de créer un commutateur virtuel, puis ne peut pas connecter le nouveau commutateur à la carte réseau externe hôte du conteneur (car la carte réseau sera déjà connectée au commutateur qui a été créé hors bande).
Par exemple, ce problème se produit si vous devez d’abord créer un commutateur virtuel sur votre hôte pendant l’exécution du service Docker, puis essayer de créer un réseau transparent. Dans ce cas, Docker ne reconnaît pas le commutateur que vous avez créé et crée un commutateur virtuel pour le réseau transparent.
Il existe trois approches pour résoudre ce problème :
- Vous pouvez bien sûr supprimer le commutateur virtuel créé hors bande, ce qui permettra à Docker de créer un commutateur virtuel et de le connecter à la carte réseau hôte sans problème. Avant de choisir cette approche, assurez-vous que votre commutateur virtuel hors bande n’est pas utilisé par d’autres services (par exemple, Hyper-V).
- Sinon, si vous décidez d’utiliser un commutateur virtuel externe créé hors bande, redémarrez les services Docker et HNS pour rendre le commutateur visible par Docker.
PS C:\> restart-service hns
PS C:\> restart-service docker
- Une autre option consiste à utiliser l’option « -o com.docker.network.windowsshim.interface » pour lier le commutateur virtuel externe du réseau transparent à une carte réseau spécifique qui n’est pas déjà utilisée sur l’hôte de conteneur (c’est-à-dire une carte réseau autre que celle utilisée par le commutateur virtuel créé hors bande). L’option « -o » est décrite plus loin dans la Création de plusieurs réseaux transparents sur un seul hôte de conteneur section de ce document.
Contournements de Windows Server 2016
Bien que nous continuions à ajouter de nouvelles fonctionnalités et à stimuler le développement, certaines de ces fonctionnalités ne seront pas rétroportées vers des plateformes plus anciennes. Au lieu de cela, le meilleur plan d’action consiste à se tenir à jour avec les dernières mises à jour de Windows et Windows Server. La section ci-dessous répertorie certaines solutions de contournement et mises en garde qui s'appliquent à Windows Server 2016 et aux versions antérieures de Windows 10 (c'est-à-dire avant la mise à jour Créateurs 1704).
Plusieurs réseaux NAT sur l’hôte de conteneur WS2016
Les partitions des nouveaux réseaux NAT doivent être créées sous le préfixe de mise en réseau NAT interne le plus grand. Le préfixe est disponible en exécutant la commande suivante à partir de PowerShell et en référençant le champ « InternalIPInterfaceAddressPrefix ».
PS C:\> Get-NetNAT
Par exemple, le préfixe interne du réseau NAT de l’hôte peut être 172.16.0.0/16. Dans ce cas, Docker peut être utilisé pour créer des réseaux NAT supplémentaires tant qu’ils sont un sous-ensemble du préfixe 172.16.0.0/16. Par exemple, deux réseaux NAT peuvent être créés avec les préfixes IP 172.16.1.0/24 (passerelle, 172.16.1.1) et 172.16.2.0/24 (passerelle, 172.16.2.1).
C:\> docker network create -d nat --subnet=172.16.1.0/24 --gateway=172.16.1.1 CustomNat1
C:\> docker network create -d nat --subnet=172.16.2.0/24 --gateway=172.16.1.1 CustomNat2
Les réseaux nouvellement créés peuvent être répertoriés à l’aide de :
C:\> docker network ls
Docker Compose
Docker Compose pouvez être utilisé pour définir et configurer des réseaux de conteneurs en même temps que les conteneurs/services qui utiliseront ces réseaux. La clé Compose « networks » est utilisée comme clé de niveau supérieur pour définir les réseaux auxquels les conteneurs seront connectés. Par exemple, la syntaxe ci-dessous définit le réseau NAT préexistant créé par Docker pour être le réseau « par défaut » pour tous les conteneurs/services définis dans un fichier Compose donné.
networks:
default:
external:
name: "nat"
De même, la syntaxe suivante peut être utilisée pour définir un réseau NAT personnalisé.
Remarque : le « réseau NAT personnalisé » défini dans l’exemple ci-dessous est défini comme une partition du préfixe interne NAT préexistant de l’hôte de conteneur. Pour plus de contexte, consultez la section ci-dessus, « Plusieurs réseaux NAT ».
networks:
default:
driver: nat
ipam:
driver: default
config:
- subnet: 172.16.3.0/24
Pour plus d’informations sur la définition/la configuration des réseaux de conteneurs à l’aide de Docker Compose, reportez-vous à la référence Composer un fichier.