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 .