Skip to main content

Introdução | Docker

  • Introdução | Docker
info

Comando para criar rede

docker network create --driver <tipo> <nome-da-rede>
Tipo (--driver)Descrição
bridge (padrão)Rede privada entre containers no mesmo host
hostContainer compartilha a rede do host (sem isolamento de rede)
noneSem rede
overlayRede distribuída para clusters (usado com Docker Swarm)
danger

Diferença crítica: bridge vs internal (BRIDGE)

CaracterísticaComportamento
Comunicação entre containers✔️
Acesso à internet✔️
Port binding (ports)✔️
Acesso via host✔️

(INTERNAL)

CaracterísticaComportamento
Comunicação entre containers✔️
Acesso à internet
Port binding (ports)⚠️ pode falhar
Acesso via host❌ (na prática, limitado)

None

nonedriver simplesmente desativa a rede de um contêiner, isolando-o de outros contêineres.

alt text

Host

Ao usar o hostdriver, o contêiner compartilha a pilha de rede do host Docker - parecendo que o contêiner é o próprio host, do ponto de vista da rede.

alt text

NOTA: o hostdriver só é compatível com Linux no momento.

Bridge (DEFAULT)

bridgedriver cria uma rede interna em um único host Docker. os contêineres colocados nesta rede podem se comunicar entre si, mas são isolados dos contêineres e não na rede interna. bridgeé o driver padrão ao executar contêineres únicos ou ao usar docker-compose.

alt text

Overlay

overlaydriver cria uma rede distribuída que pode abranger vários hosts Docker e, portanto, é o driver preferido para gerenciar a comunicação de contêineres em um cluster de vários hosts. overlayé o driver padrão para serviços Docker swarm.

alt text

Quando usar host.docker.internal, ip ou localhost

  • Dentro do contêiner: Use localhost ou 127.0.0.1 se o serviço ou aplicação precisa se comunicar somente dentro do próprio contêiner.

  • Para acessar serviços no host: Use host.docker.internal se o contêiner precisa se conectar a serviços que estão rodando fora do Docker, na máquina host (sua máquina física ou virtual).

  • Para comunicação entre contêineres:

    • Use o nome do serviço do Docker Compose (ex: rabbitmq, sqlserver, cache) dentro da rede Docker, como mostrado no seu docker-compose.yml.
    • Não use localhost ou 127.0.0.1 para se comunicar entre contêineres; isso só funcionaria se você estiver acessando o próprio contêiner.

Sobre NAT no docker

info

NAT = Network Address Translation (Tradução de Endereços de Rede). É um “intermediário” que troca endereços/portas de pacotes quando eles passam pelo roteador/host.

TipoCompartilha rede do hostNAT para sairPublish -pDNS internoMulti-hostIP/MAC na LANObservações-chave
bridge✅**DNS melhor em bridge custom
host✅ (Linux)n/an/aMenos latência; sem isolamento de portas
noneSó loopback; isolamento máximo
macvlann/a✖ (normal)✅ (próprios)Host↔container requer macvlan “no host”/rota
ipvlan L2n/a✖ (normal)✅ (compartilha MAC)Menos MACs no switch
ipvlan L3n/a✖ (normal)✅ (via roteamento)Precisa de rotas/prefixo
overlay✖ (entre nós)via Service✅ (Swarm)✖ (túnel)VXLAN; opcional criptografia

Quem usa NAT (no Linux, Docker “puro”)

[Container 172.17.0.5:80] --(NAT)--> [Host:8080] <-- clientes externos
^ |
+------------- DNAT --------------+
  • bridge (padrão e bridges custom)

    • Saída (egress): o Docker faz SNAT/MASQUERADE para a LAN/Internet.
    • Entrada (publish -p): o Docker cria DNAT/port-forward do host → container.
  • overlay (entre hosts, Swarm)

    • Entre containers nos nós: não usa NAT (usa VXLAN).
    • Quando você publica porta de um service: o nó que recebe a conexão faz DNAT para a task (container) alvo.

Quem não usa NAT (por padrão)

  • host

    • O container compartilha a pilha de rede do host. Não há NAT porque não há “fronteira” Docker ↔ host.
  • none

    • Sem conectividade; portanto, nada de NAT.
  • macvlan / ipvlan (L2/L3)

    • Containers têm IP (e no macvlan, MAC) próprios na rede física; trafegam na LAN sem NAT.
    • Observação: host↔container pode precisar de rota/sub-interface (não resolve com NAT por padrão).

Regra de bolso

  • Se o container está atrás de uma bridge do Docker → NAT para sair e DNAT ao publicar portas.
  • Se o container está na mesma pilha do host (host) ou “na LAN de verdade” (macvlan/ipvlan) → sem NAT.
  • Em overlay, o túnel VXLAN interliga nós sem NAT; NAT só aparece quando você expõe portas para fora do cluster.

Tabela rápida

TipoNAT de saídaDNAT ao publicar portaObservações
bridge✅ SNAT✅ DNAT (-p)1 host; isolamento + publish
host✖ (usa porta real)Compartilha stack do host
noneSó loopback
macvlann/aIP/MAC próprios na LAN
ipvlann/aIP na LAN (L2/L3) via host/roteamento
overlay✖ entre nós✅ (service published)VXLAN multi-host; DNAT no nó de entrada

Nota: em Docker Desktop (Mac/Windows) há NAT extra entre o host “real” e a VM do Docker — é um caso à parte do ambiente, não do tipo de rede do container.