Partilhar via


Opções avançadas de rede no Windows

Aplica-se a: Windows Server 2025, Windows Server 2022, Windows Server 2019, Windows Server 2016

Várias opções de driver de rede são suportadas para aproveitar os recursos específicos do Windows.

Switch Embedded Teaming com redes Docker

Aplica-se a todos os drivers de rede

Você pode aproveitar o Agrupamento de Switch Incorporado ao criar redes de anfitrião de contêiner para utilização com o Docker, especificando vários adaptadores de rede (separados por vírgulas) com a opção -o com.docker.network.windowsshim.interface.

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

Definir o ID de VLAN para uma rede

Aplica-se a controladores de rede transparentes e L2bridge

Para definir um ID de VLAN para uma rede, use a opção -o com.docker.network.windowsshim.vlanid=<VLAN ID> para o comando docker network create. Por exemplo, você pode usar o seguinte comando para criar uma rede transparente com uma ID de VLAN de 11:

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

Ao definir a ID de VLAN para uma rede, você está definindo o isolamento de VLAN para todos os pontos de extremidade de contêiner que serão conectados a essa rede.

Verifique se o adaptador de rede (físico) do host está no modo de tronco para permitir que todo o tráfego com etiquetagem seja processado pelo vSwitch com a porta vNIC (ponto de extremidade do contêiner) no modo de acesso na VLAN correta.

Especificar a política OutboundNAT para uma rede

Aplica-se a redes l2bridge

Normalmente, quando se cria uma rede de contentores l2bridge usando docker network create, os pontos de extremidade de contentores não têm uma política OutboundNAT do HNS aplicada, o que resulta em contentores que não conseguem alcançar o mundo exterior. Se você estiver criando uma rede, poderá usar a opção -o com.docker.network.windowsshim.enable_outboundnat=<true|false> para aplicar a política OutboundNAT HNS para dar aos contêineres acesso ao mundo exterior:

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

Se houver um conjunto de destinos (por exemplo, a conectividade de contêiner para contêiner é necessária) para onde não queremos que o NAT ocorra, também precisamos especificar uma ExceptionList:

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

Especificar o nome de uma rede para o serviço HNS

Aplica-se a todos os drivers de rede

Normalmente, quando você cria uma rede de contêiner usando docker network create, o nome da rede fornecido é usado pelo serviço Docker, mas não pelo serviço HNS. Se estiver a criar uma rede, pode especificar o nome que lhe é dado pelo serviço HNS utilizando a opção -o com.docker.network.windowsshim.networkname=<network name> para o comando docker network create. Por exemplo, pode utilizar o seguinte comando para criar uma rede transparente com um nome especificado para o serviço HNS:

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

Vincular uma rede a uma interface de rede específica

Aplica-se a todos os drivers de rede, exceto 'nat'

Para vincular uma rede (conectada através do comutador virtual Hyper-V) a uma interface de rede específica, use a opção -o com.docker.network.windowsshim.interface=<Interface> para o comando docker network create. Por exemplo, você pode usar o seguinte comando para criar uma rede transparente que está conectada à interface de rede "Ethernet 2":

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

Nota: O valor para com.docker.network.windowsshim.interface é o Nome do adaptador de rede, que pode ser encontrado com:

PS C:\> Get-NetAdapter

Especificar o sufixo DNS e/ou os servidores DNS de uma rede

Aplica-se a todos os drivers de rede

Use a opção -o com.docker.network.windowsshim.dnssuffix=<DNS SUFFIX> para especificar o sufixo DNS de uma rede e a opção -o com.docker.network.windowsshim.dnsservers=<DNS SERVER/S> para especificar os servidores DNS de uma rede. Por exemplo, você pode usar o seguinte comando para definir o sufixo DNS de uma rede como "example.com" e os servidores DNS de uma rede como 4.4.4.4 e 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

FPV

Consulte este artigo para obter mais informações.

Dicas & Insights

Aqui está uma lista de dicas e insights úteis, inspirados por perguntas comuns sobre a rede de contêineres do Windows que ouvimos da comunidade...

O HNS requer que o IPv6 esteja habilitado em máquinas host de contêiner

Como parte do KB4015217 HNS requer que o IPv6 esteja habilitado em hosts de contêiner do Windows. Se você estiver enfrentando um erro como o abaixo, há uma chance de que o IPv6 esteja desativado em sua máquina 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

Contêineres Linux no Windows

NOVO: Estamos trabalhando para tornar possível executar contêineres Linux e Windows lado a lado sem o Moby Linux VM. Consulte esta postagem de blog sobre Contêineres Linux no Windows (LCOW) para obter detalhes. Veja como começar .

NOTA: O LCOW está descontinuando a VM Moby Linux e passará a utilizar o vSwitch interno "nat" padrão do HNS.

As VMs Moby Linux usam o switch DockerNAT com o Docker para Windows (um produto do Docker CE)

O Docker para Windows (o driver do Windows para o mecanismo Docker CE) no Windows 10 usará um vSwitch interno chamado 'DockerNAT' para conectar VMs Moby Linux ao host do contêiner. Os desenvolvedores que usam VMs Moby Linux no Windows devem estar cientes de que seus hosts estão usando o DockerNAT vSwitch em vez do vSwitch "nat" que é criado pelo serviço HNS (que é o switch padrão usado para contêineres do Windows).

Para usar DHCP para atribuição de IP em um host de contêiner virtual, habilite MACAddressSpoofing

Se o host do contêiner estiver virtualizado e você desejar usar o DHCP para atribuição de IP, deverá habilitar MACAddressSpoofing no adaptador de rede da máquina virtual. Caso contrário, o host Hyper-V bloqueará o tráfego de rede dos contêineres na VM com vários endereços MAC. Você pode habilitar MACAddressSpoofing com este comando do PowerShell:

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

Se você estiver executando o VMware como hipervisor, precisará ativar o modo promíscuo para que isso funcione. Os detalhes podem ser encontrados aqui

Criando várias redes transparentes em um único host de contêiner

Caso pretenda criar mais de uma rede transparente, deve especificar a que adaptador de rede (virtual) o Comutador Virtual Hyper-V externo deve associar-se. Para especificar a interface de uma rede, use a seguinte sintaxe:

# 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

Lembre-se de especificar --subnet e --gateway ao usar a atribuição de IP estático

Ao usar a atribuição de IP estático, você deve primeiro garantir que os parâmetros --subnet e --gateway sejam especificados quando a rede for criada. O endereço IP da sub-rede e do gateway deve ser o mesmo que as configurações de rede para o host do contêiner - ou seja, a rede física. Por exemplo, veja como você pode criar uma rede transparente e, em seguida, executar um ponto de extremidade nessa rede usando a atribuição de IP estático:

# 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

Atribuição de IP DHCP não suportada com redes L2Bridge

Somente a atribuição de IP estático é suportada com redes de contêiner criadas usando o driver l2bridge. Como dito acima, lembre-se de usar os parâmetros --subnet e --gateway para criar uma rede configurada para atribuição de IP estático.

As redes que utilizam vSwitch externo devem ter cada uma seu próprio adaptador de rede

Observe que se várias redes que usam um vSwitch externo para conectividade (por exemplo, Transparent, L2 Bridge, L2 Transparent) são criadas no mesmo host de contêiner, cada uma delas requer seu próprio adaptador de rede.

Atribuição de IP em contêineres parados versus em execução

A atribuição de IP estático é executada diretamente no adaptador de rede do contêiner e só deve ser executada quando o contêiner estiver em um estado INTERROMPIDO. Não há suporte para "hot-add" de adaptadores de rede de contêiner ou alterações na pilha de rede (no Windows Server 2016) enquanto o contêiner está em execução.

O vSwitch existente (não visível para o Docker) pode bloquear a criação de rede transparente

Se você encontrar um erro na criação de uma rede transparente, é possível que haja um vSwitch externo em seu sistema que não foi descoberto automaticamente pelo Docker e, portanto, está impedindo que a rede transparente seja vinculada ao adaptador de rede externo do host do contêiner.

Ao criar uma rede transparente, o Docker cria um vSwitch externo para a rede e, em seguida, tenta vincular o switch a um adaptador de rede (externo) - o adaptador pode ser um adaptador de rede VM ou o adaptador de rede físico. Se um vSwitch já tiver sido criado no host do contêiner, e estiver visível para o Docker, o mecanismo do Windows Docker usará esse switch em vez de criar um novo. No entanto, se o vSwitch que foi criado fora de banda (ou seja, criado no host do contêiner usando o HYper-V Manager ou o PowerShell) e ainda não estiver visível para o Docker, o mecanismo do Windows Docker tentará criar um novo vSwitch e, em seguida, não poderá conectar o novo switch ao adaptador de rede externo do host do contêiner (porque o adaptador de rede já estará conectado ao switch que foi criado fora da banda).

Por exemplo, esse problema surgiria se você primeiro criasse um novo vSwitch em seu host enquanto o serviço Docker estivesse em execução e, em seguida, tentasse criar uma rede transparente. Nesse caso, o Docker não reconheceria o switch que você criou e criaria um novo vSwitch para a rede transparente.

Existem três abordagens para resolver este problema:

  • Você pode, é claro, excluir o vSwitch que foi criado fora da banda, o que permitirá que o docker crie um novo vSwitch e conecte-o ao adaptador de rede host sem problemas. Antes de escolher esta abordagem, certifique-se de que o seu vSwitch fora de banda não está a ser utilizado por outros serviços (por exemplo, Hyper-V).
  • Como alternativa, se você decidir usar um vSwitch externo que foi criado fora da banda, reinicie os serviços Docker e HNS para tornar o switch visível para o Docker.
PS C:\> restart-service hns
PS C:\> restart-service docker
  • Outra opção é usar a opção '-o com.docker.network.windowsshim.interface' para vincular o vSwitch externo da rede transparente a um adaptador de rede específico que ainda não está em uso no host do contêiner (ou seja, um adaptador de rede diferente daquele que está sendo usado pelo vSwitch que foi criado fora da banda). A opção '-o' é descrita mais detalhadamente na seção Criação de várias redes transparentes em um único host de contêiner deste documento.

Soluções alternativas do Windows Server 2016

Embora continuemos a adicionar novos recursos e impulsionar o desenvolvimento, alguns desses recursos não serão retroportados para plataformas mais antigas. Em vez disso, o melhor plano de ação é "entrar no trem" para as atualizações mais recentes do Windows e do Windows Server. A seção abaixo lista algumas soluções alternativas e advertências que se aplicam ao Windows Server 2016 e versões mais antigas do Windows 10 (ou seja, antes da Atualização de Criadores 1704)

Várias redes NAT no host de contêiner WS2016

As partições para qualquer nova rede NAT devem ser criadas sob o prefixo de rede NAT interno mais amplo. O prefixo pode ser encontrado executando o seguinte comando do PowerShell e fazendo referência ao campo "InternalIPInterfaceAddressPrefix".

PS C:\> Get-NetNAT

Por exemplo, o prefixo interno da rede NAT do host pode ser, 172.16.0.0/16. Nesse caso, o Docker pode ser usado para criar redes NAT adicionais desde que sejam um subconjunto do prefixo 172.16.0.0/16. Por exemplo, duas redes NAT podem ser criadas com os prefixos 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

As redes recém-criadas podem ser listadas usando:

C:\> docker network ls

Docker Compose

Docker Compose pode ser usado para definir e configurar redes de contêineres juntamente com os contêineres/serviços que usarão essas redes. A chave Compose 'networks' é usada como a chave de nível superior na definição das redes às quais os contêineres serão conectados. Por exemplo, a sintaxe abaixo define a rede NAT preexistente criada pelo Docker como sendo a rede 'padrão' para todos os contêineres/serviços definidos em um determinado arquivo Compose.

networks:
 default:
  external:
   name: "nat"

Da mesma forma, a sintaxe a seguir pode ser usada para definir uma rede NAT personalizada.

Nota: A 'rede NAT personalizada' definida no exemplo abaixo é definida como uma partição do prefixo interno NAT pré-existente do host do contêiner. Consulte a seção acima, 'Redes NAT múltiplas', para obter mais contexto.

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

Para obter mais informações sobre como definir/configurar redes de contentores usando o Docker Compose, consulte a referência de ficheiros Compose em .