Freigeben über


Erweiterte Netzwerkoptionen in Windows

Gilt für: Windows Server 2025, Windows Server 2022, Windows Server 2019, Windows Server 2016

Mehrere Netzwerktreiberoptionen werden unterstützt, um windowsspezifische Funktionen und Features zu nutzen.

Switch Embedded Teaming mit Docker-Netzwerken

Gilt für alle Netzwerktreiber

Sie können Switch Embedded Teaming nutzen, wenn Sie Containerhostnetzwerke für die Verwendung durch Docker erstellen, indem Sie mehrere Netzwerkadapter (durch Kommas getrennt) mit der Option -o com.docker.network.windowsshim.interface angeben.

C:\> docker network create -d transparent -o com.docker.network.windowsshim.interface="Ethernet 2", "Ethernet 3" TeamedNet

Festlegen der VLAN-ID für ein Netzwerk

Gilt für transparente und l2Bridge-Netzwerktreiber

Um eine VLAN-ID für ein Netzwerk festzulegen, verwenden Sie die Option, -o com.docker.network.windowsshim.vlanid=<VLAN ID> zum Befehl docker network create. Beispielsweise können Sie den folgenden Befehl verwenden, um ein transparentes Netzwerk mit einer VLAN-ID von 11 zu erstellen:

C:\> docker network create -d transparent -o com.docker.network.windowsshim.vlanid=11 MyTransparentNetwork

Wenn Sie die VLAN-ID für ein Netzwerk festlegen, legen Sie die VLAN-Isolation für alle Containerendpunkte fest, die an dieses Netzwerk angefügt werden.

Stellen Sie sicher, dass sich der Hostnetzwerkadapter (physisch) im Trunk-Modus befindet, damit der gesamte getaggte Datenverkehr vom vSwitch mit dem vNIC-Port (Containerendpunkt) im Zugriffsmodus im richtigen VLAN verarbeitet werden kann.

Angeben einer ausgehendenNAT-Richtlinie für ein Netzwerk

Gilt für l2bridge-Netzwerke

Normalerweise, wenn Sie ein l2bridge-Containernetzwerk mit docker network createerstellen, wird auf Containerendpunkte keine HNS-OutboundNAT-Richtlinie angewendet, was dazu führt, dass Container die Außenwelt nicht erreichen können. Wenn Sie ein Netzwerk erstellen, können Sie die Option -o com.docker.network.windowsshim.enable_outboundnat=<true|false> verwenden, um die Richtlinie "OutboundNAT HNS" anzuwenden, um Containern Zugriff auf die Außenwelt zu gewähren:

C:\> docker network create -d l2bridge -o com.docker.network.windowsshim.enable_outboundnat=true MyL2BridgeNetwork

Wenn eine Reihe von Zielen (z. B. Container-zu-Container-Konnektivität erforderlich ist) vorliegt, bei denen NAT nicht stattfinden soll, müssen wir auch eine Ausnahmeliste angeben.

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

Angeben des Namens eines Netzwerks für den HNS-Dienst

Gilt für alle Netzwerktreiber

Normalerweise wird bei der Erstellung eines Container-Netzwerks mit docker network createder von Ihnen angegebene Netzwerkname vom Docker-Dienst verwendet, jedoch nicht vom HNS-Dienst. Wenn Sie ein Netzwerk erstellen, können Sie den Namen angeben, den der HNS-Dienst erhält, indem Sie die Option -o com.docker.network.windowsshim.networkname=<network name> für den docker network create verwenden. Beispielsweise können Sie den folgenden Befehl verwenden, um ein transparentes Netzwerk mit einem Namen zu erstellen, der für den HNS-Dienst angegeben ist:

C:\> docker network create -d transparent -o com.docker.network.windowsshim.networkname=MyTransparentNetwork MyTransparentNetwork

Binden eines Netzwerks an eine bestimmte Netzwerkschnittstelle

Gilt für alle Netzwerktreiber mit Ausnahme von "nat"

Um ein Netzwerk (über den virtuellen Hyper-V-Switch angebunden) an eine bestimmte Netzwerkschnittstelle zu binden, verwenden Sie die Option -o com.docker.network.windowsshim.interface=<Interface> mit dem Befehl docker network create. Sie können beispielsweise den folgenden Befehl verwenden, um ein transparentes Netzwerk zu erstellen, das an die Netzwerkschnittstelle "Ethernet 2" angeschlossen ist:

C:\> docker network create -d transparent -o com.docker.network.windowsshim.interface="Ethernet 2" TransparentNet2

Hinweis: Der Wert für com.docker.network.windowsshim.interface ist der Name des Netzwerkadapters, den Sie mit folgendem Befehl finden können:

PS C:\> Get-NetAdapter

Geben Sie das DNS-Suffix und/oder die DNS-Server eines Netzwerks an.

Gilt für alle Netzwerktreiber

Verwenden Sie die Option, -o com.docker.network.windowsshim.dnssuffix=<DNS SUFFIX>, um das DNS-Suffix eines Netzwerks und die Option anzugeben, -o com.docker.network.windowsshim.dnsservers=<DNS SERVER/S>, um die DNS-Server eines Netzwerks anzugeben. Sie können z. B. den folgenden Befehl verwenden, um das DNS-Suffix eines Netzwerks auf "example.com" und die DNS-Server eines Netzwerks auf 4.4.4.4 und 8.8.8.8 festzulegen:

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

Weitere Informationen finden Sie in diesem Artikel.

Tipps und Einblicke

Hier ist eine Liste der praktischen Tipps und Einblicke, die von allgemeinen Fragen zu Windows-Containernetzwerken inspiriert wurden, die wir von der Community hören...

HNS erfordert, dass IPv6 auf Containerhostcomputern aktiviert ist

Gemäß KB4015217 erfordert HNS, dass IPv6 auf Windows-Containerhosts aktiviert ist. Wenn ein Fehler auftritt, z. B. die nachstehende, besteht die Möglichkeit, dass IPv6 auf Ihrem Hostcomputer deaktiviert ist.

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

Linux-Container unter Windows

NEU: Wir arbeiten daran, Linux- und Windows-Container parallel ohne die Moby Linux VMauszuführen. Weitere Informationen finden Sie in diesem Blogbeitrag zu Linux-Containern unter Windows (LCOW). Hier finden Sie die ersten Schritte.

HINWEIS: LCOW stellt die Moby Linux-VM ein und wird den standardmäßigen internen HNS-"nat"-vSwitch verwenden.

Moby Linux VMs verwenden DockerNAT Switch mit Docker für Windows (ein Produkt von Docker CE)

Docker für Windows (der Windows-Treiber für das Docker CE-Modul) unter Windows 10 verwendet einen internen vSwitch namens "DockerNAT", um Moby Linux-VMs mit dem Containerhost zu verbinden. Entwickler, die Moby Linux-VMs unter Windows verwenden, sollten beachten, dass ihre Hosts den DockerNAT-vSwitch anstelle des "nat"-vSwitch verwenden, der vom HNS-Dienst erstellt wird (der Standardswitch, der für Windows-Container verwendet wird).

Um DHCP für die IP-Zuweisung auf einem virtuellen Containerhost zu verwenden, aktivieren Sie MACAddressSpoofing.

Wenn der Containerhost virtualisiert ist und Sie DHCP für die IP-Zuweisung verwenden möchten, müssen Sie MACAddressSpoofing auf dem Netzwerkadapter des virtuellen Computers aktivieren. Andernfalls blockiert der Hyper-V-Host den Netzwerkdatenverkehr von den Containern auf dem virtuellen Computer mit mehreren MAC-Adressen. Sie können MACAddressSpoofing mit diesem PowerShell-Befehl aktivieren:

PS C:\> Get-VMNetworkAdapter -VMName ContainerHostVM | Set-VMNetworkAdapter -MacAddressSpoofing On

Wenn Sie VMware als Hypervisor ausführen, müssen Sie den promiscuous Modus aktivieren, damit dies funktioniert. Details finden Sie hier

Erstellen mehrerer transparenter Netzwerke auf einem einzelnen Containerhost

Wenn Sie mehr als ein transparentes Netzwerk erstellen möchten, müssen Sie angeben, an welchen (virtuellen) Netzwerkadapter der externe Hyper-V Virtual Switch gebunden werden soll. Verwenden Sie die folgende Syntax, um die Schnittstelle für ein Netzwerk anzugeben:

# 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

Denken Sie daran, --subnetz- und --gateway- bei Verwendung statischer IP-Zuweisung anzugeben

Wenn Sie statische IP-Zuweisung verwenden, müssen Sie zuerst sicherstellen, dass die Parameter --subnet und --gateway- beim Erstellen des Netzwerks angegeben werden. Die Subnetz- und Gateway-IP-Adresse sollte mit den Netzwerkeinstellungen für den Containerhost identisch sein , d. h. das physische Netzwerk. So können Sie beispielsweise ein transparentes Netzwerk erstellen und dann einen Endpunkt in diesem Netzwerk mithilfe statischer IP-Zuweisung ausführen:

# 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

DHCP-IP-Zuweisung wird mit L2Bridge-Netzwerken nicht unterstützt

Nur statische IP-Zuweisung wird mit Containernetzwerken unterstützt, die mit dem l2bridge-Treiber erstellt wurden. Denken Sie wie oben erwähnt daran, die Parameter --subnet und --gateway zu verwenden, um ein Netzwerk zu erstellen, das für die statische IP-Zuweisung konfiguriert ist.

Netzwerke, die externe vSwitch nutzen, müssen jeweils über einen eigenen Netzwerkadapter verfügen.

Beachten Sie, dass mehrere Netzwerke, die einen externen vSwitch für die Konnektivität verwenden (z. B. Transparent, L2-Brücke, L2 Transparent) auf demselben Containerhost erstellt werden, jeder von ihnen einen eigenen Netzwerkadapter benötigt.

IP-Zuweisung für beendete und ausgeführte Container

Statische IP-Zuweisung wird direkt auf dem Netzwerkadapter des Containers ausgeführt und darf nur ausgeführt werden, wenn sich der Container in einem STOPP-Zustand befindet. Has Hinzufügen von Containernetzwerkadaptern im laufenden Systembetrieb oder Änderungen am Netzwerkstapel werden (in Windows Server 2016) nicht unterstützt, während der Container ausgeführt wird.

Vorhandene vSwitches (für Docker nicht sichtbar) können die Erstellung eines transparenten Netzwerks blockieren.

Wenn beim Erstellen eines transparenten Netzwerks ein Fehler auftritt, ist es möglich, dass ein externer vSwitch auf Ihrem System vorhanden ist, der nicht automatisch von Docker erkannt wurde und daher verhindert, dass das transparente Netzwerk an den externen Netzwerkadapter ihres Containerhosts gebunden wird.

Beim Erstellen eines transparenten Netzwerks erstellt Docker einen externen vSwitch für das Netzwerk und versucht dann, den Switch an einen (externen) Netzwerkadapter zu binden. Der Adapter kann ein VM-Netzwerkadapter oder der physische Netzwerkadapter sein. Wenn bereits ein vSwitch auf dem Containerhost erstellt wurde, und für Docker sichtbar ist, verwendet das Windows Docker-Modul diesen Switch, anstatt einen neuen zu erstellen. Wenn jedoch der vSwitch, der out-of-Band erstellt wurde (d. h. auf dem Containerhost mit HYper-V Manager oder PowerShell erstellt wurde) erstellt wurde und noch nicht für Docker sichtbar ist, versucht das Windows Docker-Modul, einen neuen vSwitch zu erstellen und kann dann den neuen Switch nicht mit dem externen Netzwerkadapter des Containerhosts verbinden (da der Netzwerkadapter bereits mit dem Switch verbunden ist, der out-of-Band erstellt wurde).

Dieses Problem würde beispielsweise auftreten, wenn Sie zuerst einen neuen vSwitch auf Ihrem Host erstellen würden, während der Docker-Dienst ausgeführt wurde, und dann versuchen, ein transparentes Netzwerk zu erstellen. In diesem Fall erkennt Docker den von Ihnen erstellten Switch nicht und erstellt einen neuen vSwitch für das transparente Netzwerk.

Es gibt drei Ansätze zur Lösung dieses Problems:

  • Sie können natürlich den vSwitch löschen, der out-of-Band erstellt wurde, wodurch Docker einen neuen vSwitch erstellen und ihn ohne Probleme mit dem Hostnetzwerkadapter verbinden kann. Stellen Sie vor der Auswahl dieses Ansatzes sicher, dass Ihr Out-of-Band-vSwitch nicht von anderen Diensten (z. B. Hyper-V) verwendet wird.
  • Wenn Sie einen externen vSwitch verwenden möchten, der out-of-Band erstellt wurde, starten Sie die Docker- und HNS-Dienste neu, um den Switch für Docker sichtbar zu machen.
PS C:\> restart-service hns
PS C:\> restart-service docker
  • Eine weitere Option besteht darin, die Option "-o com.docker.network.windowsshim.interface" zu verwenden, um den externen vSwitch des transparenten Netzwerks an einen bestimmten Netzwerkadapter zu binden, der noch nicht auf dem Containerhost verwendet wird (d. h. ein anderer Netzwerkadapter als der, der vom vSwitch verwendet wird, der out-of-Band erstellt wurde). Die Option "-o" wird weiter im Erstellen mehrerer transparenter Netzwerke auf einem einzelnen Containerhost Abschnitt dieses Dokuments beschrieben.

Windows Server 2016–Umgehungslösungen

Obwohl wir weiterhin neue Features hinzufügen und die Entwicklung vorantreiben, werden einige dieser Features nicht wieder zu älteren Plattformen portiert. Stattdessen besteht der beste Aktionsplan darin, "auf den Zug aufzuspringen" und die neuesten Updates für Windows und Windows Server zu nutzen. Im folgenden Abschnitt werden einige Umgehungen und Einschränkungen bzw. Hinweise aufgeführt, die für Windows Server 2016 und ältere Versionen von Windows 10 gelten (d. h. vor der Version 1704 Creators Update).

Mehrere NAT-Netzwerke auf WS2016-Containerhost

Die Partitionen für alle neuen NAT-Netzwerke müssen unter dem größeren internen NAT-Netzwerkpräfix erstellt werden. Das Präfix finden Sie, indem Sie den folgenden Befehl über PowerShell ausführen und auf das Feld "InternalIPInterfaceAddressPrefix" verweisen.

PS C:\> Get-NetNAT

Beispielsweise kann das interne NAT-Netzwerkpräfix des Hosts 172.16.0.0/16 sein. In diesem Fall kann Docker verwendet werden, um zusätzliche NAT-Netzwerke zu erstellen, solange sie eine Teilmenge des Präfixes 172.16.0.0/16 sind. Beispielsweise könnten zwei NAT-Netzwerke mit den IP-Präfixen 172.16.1.0/24 (Gateway, 172.16.1.1) und 172.16.2.0/24 (Gateway, 172.16.2.1) erstellt werden.

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

Die neu erstellen Netzwerke können mit folgendem Befehl aufgelistet werden:

C:\> docker network ls

Docker Compose

Docker Compose kann verwendet werden, um Containernetzwerke zusammen mit den Containern/Diensten zu definieren und zu konfigurieren, die diese Netzwerke verwenden. Der Schlüssel "Netzwerke verfassen" wird als Schlüssel der obersten Ebene verwendet, um die Netzwerke zu definieren, mit denen Container verbunden werden. Die folgende Syntax definiert z. B. das bereits vorhandene NAT-Netzwerk, das von Docker erstellt wurde, als "Standardnetzwerk" für alle Container/Dienste, die in einer bestimmten Verfassendatei definiert sind.

networks:
 default:
  external:
   name: "nat"

Ebenso kann die folgende Syntax verwendet werden, um ein benutzerdefiniertes NAT-Netzwerk zu definieren.

Hinweis: Das im folgenden Beispiel definierte benutzerdefinierte NAT-Netzwerk wird als Partition des bereits vorhandenen NAT-internen Präfixes des Containerhosts definiert. Weitere Kontexte finden Sie im abschnitt "Multiple NAT Networks".

networks:
  default:
    driver: nat
    ipam:
      driver: default
      config:
      - subnet: 172.16.3.0/24

Für weitere Informationen zum Definieren oder Konfigurieren von Containernetzwerken mit Docker Compose, siehe die Compose-Datei-Referenz .