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 capacidades e funcionalidades específicas do Windows.
Alternar o Agrupamento Integrado com Redes do Docker
Aplica-se a todos os drivers de rede
Você pode aproveitar Switch Embedded Teaming ao criar redes de host de contêiner para uso pelo 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 a ID da VLAN para uma rede
Aplica-se aos drivers de rede transparent e l2bridge
Para definir uma 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 da VLAN para uma rede, você está definindo o isolamento de VLAN para quaisquer pontos de extremidade de contêiner que serão anexados a essa rede.
Verifique se o adaptador de rede do host (físico) está no modo de tronco para permitir que todo o tráfego marcado seja processado pelo vSwitch com a porta vNIC (ponto de extremidade de contêiner) no modo de acesso na VLAN correta.
Especificar a política outboundNAT para uma rede
Aplica-se a redes l2bridge
Normalmente, quando você cria uma rede de contêineres l2bridge
usando docker network create
, os pontos de extremidade de contêiner não têm uma política de OutboundNAT do HNS aplicada, fazendo com que os contêineres não consigam acessar 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 de HNS OutboundNAT para fornecer 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êineres usando docker network create
, o nome de rede que você fornece é usado pelo serviço docker, mas não pelo serviço HNS. Se você estiver criando uma rede, poderá especificar o nome fornecido pelo serviço HNS usando a opção, -o com.docker.network.windowsshim.networkname=<network name>
ao comando docker network create
. Por exemplo, você pode usar 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
Associar uma rede a uma interface de rede específica
Aplica-se a todos os drivers de rede, exceto 'nat'
Para associar uma rede (anexada por meio do comutador virtual Hyper-V) a um adaptador de rede específico, use a opção -o com.docker.network.windowsshim.interface=<Interface>
ao comando docker network create
. Por exemplo, você pode usar o seguinte comando para criar uma rede transparente anexada ao adaptador de rede "Ethernet 2":
C:\> docker network create -d transparent -o com.docker.network.windowsshim.interface="Ethernet 2" TransparentNet2
Observação: 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>
especificar o sufixo DNS de uma rede e a opção -o com.docker.network.windowsshim.dnsservers=<DNS SERVER/S>
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
VFP
Confira este artigo para obter mais informações.
Dicas e Insights
Aqui está uma lista de dicas e insights úteis, inspirados em perguntas comuns sobre a rede de contêineres do Windows que ouvimos da comunidade...
O HNS requer que o IPv6 esteja habilitado em computadores 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 encontrando um erro como o mostrado abaixo, há uma chance de que o IPv6 esteja desabilitado no computador 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 do Linux no Windows
NOVO: Estamos trabalhando para possibilitar a execução de contêineres do Linux e do Windows lado a lado sem a VM Moby Linux. Confira esta postagem no blog sobre contêineres do Linux no Windows (LCOW) para obter detalhes. Veja como começar.
OBSERVAÇÃO: o LCOW está descontinuando a VM Moby Linux e passará a utilizar o vSwitch interno padrão "nat" do HNS.
As VMs do 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 motor Docker CE) no Windows 10 usará um vSwitch interno chamado 'DockerNAT' para conectar VMs do Moby Linux ao host do contêiner. Os desenvolvedores que usam VMs do Moby Linux no Windows devem estar cientes de que seus hosts estão usando o DockerNAT vSwitch em vez do vSwitch "nat" criado pelo serviço HNS (que é o comutador padrão usado para contêineres do Windows).
Para usar o DHCP para atribuição de IP em um host de contêiner virtual, habilite MACAddressSpoofing
Se o host de contêiner for virtualizado e você quiser usar o DHCP para atribuição de IP, você 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 seu hipervisor, precisará habilitar 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
Se você desejar criar mais de uma rede transparente, deve especificar para qual adaptador de rede (virtual) o Virtual Switch externo Hyper-V deve ser associado. 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 --sub-rede e --gateway ao usar a atribuição de IP estático
Ao usar a atribuição de IP estático, primeiro você deve garantir que os parâmetros de --sub-rede 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 do host de 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
A atribuição de IP via DHCP não é suportada em redes L2Bridge
Somente a atribuição de IP estático tem suporte com redes de contêiner criadas usando o driver l2bridge. Conforme indicado acima, lembre-se de usar os parâmetros de --sub-rede e --gateway para criar uma rede configurada para atribuição de IP estático.
As redes que aproveitam o vSwitch externo devem ter cada um 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) forem criadas no mesmo host de contêiner, cada uma delas exigirá 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 está em um estado PARADO. Não há suporte para "adição quente" 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 ao Docker) pode bloquear a criação de rede transparente
Se você encontrar um erro ao criar 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 associada ao adaptador de rede externo do seu host de contêiner.
Ao criar uma rede transparente, o Docker cria um vSwitch externo para a rede e tenta associar o comutador a um adaptador de rede (externo) – o adaptador pode ser um Adaptador de Rede de VM ou o adaptador de rede física. Se um vSwitch já tiver sido criado no host do contêiner, e estiver visível para o Docker, o mecanismo do Docker do Windows usará essa opção em vez de criar uma nova. No entanto, se o vSwitch que foi criado fora de banda (ou seja, criado no host de contêiner usando o gerenciador de HYper-V ou PowerShell) e ainda não estiver visível para o Docker, o mecanismo do Docker do Windows tentará criar um novo vSwitch e, em seguida, não poderá conectar o novo comutador ao adaptador de rede externo do host do contêiner (porque o adaptador de rede já estará conectado ao comutador que foi criado fora de banda).
Por exemplo, esse problema surgiria se você criasse primeiro um vSwitch no host enquanto o serviço docker estava em execução e, em seguida, tentasse criar uma rede transparente. Nesse caso, o Docker não reconheceria a opção que você criou e criaria um novo vSwitch para a rede transparente.
Há três abordagens para resolver esse problema:
- É claro que você pode excluir o vSwitch que foi criado fora de banda, o que permitirá que o Docker crie um novo vSwitch e conecte-o ao adaptador de rede host sem problemas. Antes de escolher essa abordagem, verifique se o vSwitch fora de banda não está sendo usado por outros serviços (por exemplo, Hyper-V).
- Como alternativa, se você decidir usar um vSwitch externo criado fora de banda, reinicie os serviços Docker e HNS para tornar a opção 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 associar o vSwitch externo da rede transparente a um adaptador de rede específico que ainda não está em uso no host de contêiner (ou seja, um adaptador de rede diferente daquele que está sendo usado pelo vSwitch que foi criado fora de banda). A opção '-o' é descrita ainda mais na seção Criando várias redes transparentes em um único host de contêiner seção 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 portados novamente para plataformas mais antigas. Em vez disso, o melhor plano de ação é "entrar no trem" para atualizações mais recentes no Windows e no Windows Server. A seção a seguir lista algumas alternativas e advertências que se aplicam ao Windows Server 2016 e versões mais antigas do Windows 10 (ou seja, antes do 1704 Creators Update)
Várias redes NAT no Host de Contêiner do WS2016
As partições para qualquer nova rede NAT devem ser criadas sob o prefixo de rede NAT interno maior. O prefixo pode ser encontrado executando o comando a seguir 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
o Docker Compose pode ser usado para definir e configurar redes de contêiner ao lado dos contêineres/serviços que usarão essas redes. A chave "redes" do Compose é 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 a seguir define a rede NAT preexistente criada pelo Docker como 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.
Observação: a "rede NAT personalizada" definida no exemplo abaixo é definida como uma partição do prefixo interno NAT preexistente do host de contêiner. Consulte a seção acima, "Várias redes NAT", 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 contêiner usando o Docker Compose, confira a Referência de Arquivo Compose.