Condividi tramite


Opzioni di rete avanzate in Windows

Si applica a: Windows Server 2025, Windows Server 2022, Windows Server 2019, Windows Server 2016

Sono supportate diverse opzioni di driver di rete per sfruttare le funzionalità e le funzionalità specifiche di Windows.

Utilizzare il Teaming Incorporato con le Reti Docker

Si applica a tutti i driver di rete

È possibile sfruttare Switch Embedded Teaming specificando più schede di rete (separate da virgole) con l'opzione -o com.docker.network.windowsshim.interface durante la creazione di reti host per container da utilizzare con Docker.

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

Impostare l'ID VLAN per una rete

Si applica ai driver di rete trasparente e l2bridge

Per impostare un ID VLAN per una rete, usare l'opzione -o com.docker.network.windowsshim.vlanid=<VLAN ID> al comando docker network create. Ad esempio, è possibile usare il comando seguente per creare una rete trasparente con ID VLAN 11:

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

Quando si imposta l'ID VLAN per una rete, si imposta l'isolamento VLAN per tutti gli endpoint contenitore che verranno collegati a tale rete.

Assicurarsi che la scheda di rete host (fisica) sia in modalità trunk per consentire l'elaborazione di tutto il traffico con tag da parte del vSwitch con la porta vNIC (endpoint contenitore) in modalità di accesso sulla VLAN corretta.

Specificare i criteri OutboundNAT per una rete

Si applica alle reti l2bridge

In genere, quando si crea una rete di contenitori l2bridge usando docker network create, gli endpoint contenitore non hanno un criterio HNS OutboundNAT applicato, con conseguente impossibilità di raggiungere il mondo esterno. Se si sta creando una rete, è possibile usare l'opzione -o com.docker.network.windowsshim.enable_outboundnat=<true|false> per applicare il criterio HNS OutboundNAT per concedere ai contenitori l'accesso al mondo esterno:

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

Se esiste un set di destinazioni (ad esempio, è necessaria la connettività da contenitore a contenitore) per cui non si desidera che avvenga il NAT, è necessario specificare anche un elenco di eccezioni:

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

Specificare il nome di una rete per il servizio HNS

Si applica a tutti i driver di rete

In genere, quando si crea una rete contenitore usando docker network create, il nome di rete fornito viene usato dal servizio Docker ma non dal servizio HNS. Se si sta creando una rete, è possibile specificare il nome assegnato dal servizio HNS usando l'opzione , -o com.docker.network.windowsshim.networkname=<network name> al comando docker network create. Ad esempio, è possibile usare il comando seguente per creare una rete trasparente con un nome specificato per il servizio HNS:

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

Associare una rete a un'interfaccia di rete specifica

Si applica a tutti i driver di rete ad eccezione di 'nat'

Per associare una rete (collegata tramite il commutatore virtuale Hyper-V) a un'interfaccia di rete specifica, usare l'opzione -o com.docker.network.windowsshim.interface=<Interface> al comando docker network create. Ad esempio, è possibile usare il comando seguente per creare una rete trasparente collegata all'interfaccia di rete "Ethernet 2":

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

Nota: Il valore per com.docker.network.windowsshim.interface è la Namedell'adattatore di rete, che può essere trovato con:

PS C:\> Get-NetAdapter

Specificare il suffisso DNS e/o i server DNS di una rete

Si applica a tutti i driver di rete

Usare l'opzione -o com.docker.network.windowsshim.dnssuffix=<DNS SUFFIX> per specificare il suffisso DNS di una rete e l'opzione -o com.docker.network.windowsshim.dnsservers=<DNS SERVER/S> specificare i server DNS di una rete. Ad esempio, è possibile usare il comando seguente per impostare il suffisso DNS di una rete su "example.com" e i server DNS di una rete su 4.4.4.4 e 8.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

Per altre informazioni, vedere questo articolo.

Suggerimenti & Insights

Ecco un elenco di suggerimenti e informazioni dettagliate utili, ispirati a domande comuni sulla rete dei contenitori di Windows che sentiamo dalla community...

HNS richiede che IPv6 sia abilitato nei computer host del contenitore

Come parte di KB4015217 HNS richiede che IPv6 sia abilitato in host contenitore Windows. Se si verifica un errore, ad esempio quello riportato di seguito, è possibile che IPv6 sia disabilitato nel computer host.

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

Contenitori Linux su Windows

NUOVO: Microsoft sta lavorando per consentire l'esecuzione di contenitori Linux e Windows side-by-side senza la macchina virtuale Moby Linux. Per informazioni dettagliate, vedere questo post di blog sui contenitori Linux in Windows (LCOW). Ecco come iniziare .

NOTA: LCOW deprecherà la macchina virtuale Moby Linux e utilizzerà il vSwitch interno "nat" HNS predefinito.

Le macchine virtuali Moby Linux utilizzano lo switch DockerNAT con Docker per Windows (un prodotto di Docker CE)

Docker per Windows (il driver Windows per il motore Docker CE) in Windows 10 userà un vSwitch interno denominato "DockerNAT" per connettere vm Moby Linux all'host contenitore. Gli sviluppatori che usano macchine virtuali Moby Linux in Windows devono tenere presente che gli host usano il vSwitch DockerNAT anziché il vSwitch "nat" creato dal servizio HNS (ovvero il commutatore predefinito usato per i contenitori Windows).

Per usare DHCP per l'assegnazione IP in un host contenitore virtuale abilitare MACAddressSpoofing

Se l'host contenitore è virtualizzato e si vuole usare DHCP per l'assegnazione IP, è necessario abilitare MACAddressSpoofing nella scheda di rete della macchina virtuale. In caso contrario, l'host Hyper-V bloccherà il traffico di rete dai contenitori nella macchina virtuale con più indirizzi MAC. È possibile abilitare MACAddressSpoofing con questo comando di PowerShell:

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

Se si esegue VMware come hypervisor, sarà necessario abilitare la modalità promiscua per il funzionamento. I dettagli sono disponibili qui

Creazione di più reti trasparenti in un singolo host contenitore

Se si desidera creare più reti trasparenti, è necessario specificare a quale scheda di rete (virtuale) deve essere associato il commutatore virtuale esterno Hyper-V. Per specificare l'interfaccia per una rete, usare la sintassi seguente:

# 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

Ricordarsi di specificare --subnet e --gateway quando si usa l'assegnazione IP statica

Quando si usa l'assegnazione IP statica, è prima necessario assicurarsi che i parametri --subnet e --gateway vengano specificati al momento della creazione della rete. La subnet e l'indirizzo IP del gateway devono corrispondere alle impostazioni di rete per l'host contenitore, ad esempio la rete fisica. Ecco ad esempio come creare una rete trasparente e quindi eseguire un endpoint in tale rete usando l'assegnazione ip statica:

# 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

Assegnazione ip DHCP non supportata con le reti L2Bridge

L'assegnazione di indirizzi IP statici è supportata solo con le reti di contenitori create usando il driver l2bridge. Come indicato in precedenza, ricordarsi di usare i parametri --subnet e --gateway per creare una rete configurata per l'assegnazione ip statica.

Le reti che sfruttano vSwitch esterno devono avere ognuna una propria scheda di rete

Si noti che se più reti che usano un vSwitch esterno per la connettività (ad esempio Transparent, L2 Bridge, L2 Transparent) vengono create nello stesso host contenitore, ognuna di esse richiede la propria scheda di rete.

Assegnazione IP in caso di contenitori arrestati e in esecuzione

L'assegnazione ip statica viene eseguita direttamente sulla scheda di rete del contenitore e deve essere eseguita solo quando il contenitore si trova in uno stato STOPPED. L'aggiunta a caldo di adattatori di rete del contenitore o le modifiche allo stack di rete non sono supportate (in Windows Server 2016) durante l'esecuzione del contenitore.

Il vSwitch esistente (non visibile a Docker) può bloccare la creazione di reti trasparenti

Se si verifica un errore durante la creazione di una rete trasparente, è possibile che nel sistema sia presente un vSwitch esterno che non è stato individuato automaticamente da Docker e quindi impedisce che la rete trasparente venga associata alla scheda di rete esterna dell'host contenitore.

Quando si crea una rete trasparente, Docker crea un vSwitch esterno per la rete e quindi tenta di associare il commutatore a una scheda di rete (esterna). La scheda potrebbe essere una scheda di rete VM o la scheda di rete fisica. Se è già stato creato un vSwitch nell'host contenitore, ed è visibile a Docker, il motore Docker di Windows userà tale opzione anziché crearne una nuova. Tuttavia, se il vSwitch creato fuori banda (ad esempio, creato nell'host contenitore usando HYper-V Manager o PowerShell) e non è ancora visibile a Docker, il motore Docker di Windows proverà a creare un nuovo vSwitch e quindi non sarà in grado di connettere il nuovo commutatore alla scheda di rete esterna dell'host contenitore (perché la scheda di rete sarà già connessa al commutatore creato fuori banda).

Ad esempio, questo problema si verifica se si creasse prima di tutto un nuovo vSwitch nell'host durante l'esecuzione del servizio Docker, quindi provare a creare una rete trasparente. In questo caso, Docker non riconosce il commutatore creato e crea un nuovo vSwitch per la rete trasparente.

Esistono tre approcci per risolvere questo problema:

  • È naturalmente possibile eliminare il vSwitch creato fuori banda, che consentirà a Docker di creare un nuovo vSwitch e connetterlo alla scheda di rete host senza problemi. Prima di scegliere questo approccio, assicurarsi che il vSwitch fuori banda non venga usato da altri servizi , ad esempio Hyper-V.
  • In alternativa, se si decide di usare un vSwitch esterno creato fuori banda, riavviare i servizi Docker e HNS per rendere visibile il passaggio a Docker.
PS C:\> restart-service hns
PS C:\> restart-service docker
  • Un'altra opzione consiste nell'usare l'opzione '-o com.docker.network.windowsshim.interface' per associare il vSwitch esterno della rete trasparente a una scheda di rete specifica che non è già in uso nell'host contenitore ,ad esempio una scheda di rete diversa da quella usata dal vSwitch creato fuori banda. L'opzione "-o" è descritta più avanti nella sezione Creazione di più reti trasparenti in un singolo host contenitore di questo documento.

Soluzioni alternative per Windows Server 2016

Anche se continuiamo ad aggiungere nuove funzionalità e a promuovere lo sviluppo, alcune di queste funzionalità non verranno convertite nuovamente nelle piattaforme meno recenti. Al contrario, il piano d'azione migliore consiste nel "salire a bordo" per gli aggiornamenti più recenti a Windows e Windows Server. La sezione seguente elenca alcuni problemi e avvertenze che si applicano a Windows Server 2016 e versioni precedenti di Windows 10 (ad esempio prima della versione 1704 Creators Update)

Molteplici reti NAT nell'host di contenitori WS2016

Le partizioni per le nuove reti NAT devono essere create con il prefisso di rete NAT interno più grande. Il prefisso è reperibile eseguendo il comando seguente da PowerShell e facendo riferimento al campo "InternalIPInterfaceAddressPrefix".

PS C:\> Get-NetNAT

Ad esempio, il prefisso interno della rete NAT dell'host potrebbe essere 172.16.0.0/16. In questo caso, Docker può essere usato per creare reti NAT aggiuntive purché siano un subset del prefisso 172.16.0.0/16. Ad esempio, è possibile creare due reti NAT con i prefissi IP 172.16.1.0/24 (gateway, 172.16.1.1) e 172.16.2.0/24 (gateway, 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

È possibile elencare le reti appena create usando:

C:\> docker network ls

Docker Compose

docker Compose può essere usato per definire e configurare reti di contenitori insieme ai contenitori/servizi che utilizzeranno tali reti. La chiave Compose 'networks' viene usata come chiave di primo livello nella definizione delle reti a cui verranno connessi i contenitori. Ad esempio, la sintassi seguente definisce la rete NAT preesistente creata da Docker come rete "predefinita" per tutti i contenitori/servizi definiti in un determinato file Compose.

networks:
 default:
  external:
   name: "nat"

Analogamente, è possibile usare la sintassi seguente per definire una rete NAT personalizzata.

Nota: la "rete NAT personalizzata" definita nell'esempio seguente è definita come una partizione del prefisso interno NAT preesistente dell'host contenitore. Per altre informazioni di contesto, vedere la sezione precedente "Più reti NAT".

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

Per altre informazioni sulla definizione o la configurazione di reti di contenitori tramite Docker Compose, vedere il riferimento Compose File.