Introdução | Docker
- Introdução | Docker
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 |
host | Container compartilha a rede do host (sem isolamento de rede) |
none | Sem rede |
overlay | Rede distribuída para clusters (usado com Docker Swarm) |
Diferença crítica: bridge vs internal (BRIDGE)
| Característica | Comportamento |
|---|---|
| Comunicação entre containers | ✔️ |
| Acesso à internet | ✔️ |
Port binding (ports) | ✔️ |
| Acesso via host | ✔️ |
(INTERNAL)
| Característica | Comportamento |
|---|---|
| Comunicação entre containers | ✔️ |
| Acesso à internet | ❌ |
Port binding (ports) | ⚠️ pode falhar |
| Acesso via host | ❌ (na prática, limitado) |
None
O nonedriver simplesmente desativa a rede de um contêiner, isolando-o de outros contêineres.

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.

NOTA: o hostdriver só é compatível com Linux no momento.
Bridge (DEFAULT)
O 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.

Overlay
O 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.

Quando usar host.docker.internal, ip ou localhost
-
Dentro do contêiner: Use localhost ou
127.0.0.1se 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.1para se comunicar entre contêineres; isso só funcionaria se você estiver acessando o próprio contêiner.
Sobre NAT no docker
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.
| Tipo | Compartilha rede do host | NAT para sair | Publish -p | DNS interno | Multi-host | IP/MAC na LAN | Observações-chave |
|---|---|---|---|---|---|---|---|
| bridge | ✖ | ✅ | ✅ | ✅* | ✖ | ✖ | *DNS melhor em bridge custom |
| host | ✅ (Linux) | ✖ | ✖ | n/a | ✖ | n/a | Menos latência; sem isolamento de portas |
| none | ✖ | ✖ | ✖ | ✖ | ✖ | ✖ | Só loopback; isolamento máximo |
| macvlan | ✖ | ✖ | n/a | ✖ (normal) | ✖ | ✅ (próprios) | Host↔container requer macvlan “no host”/rota |
| ipvlan L2 | ✖ | ✖ | n/a | ✖ (normal) | ✖ | ✅ (compartilha MAC) | Menos MACs no switch |
| ipvlan L3 | ✖ | ✖ | n/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
| Tipo | NAT de saída | DNAT ao publicar porta | Observações |
|---|---|---|---|
| bridge | ✅ SNAT | ✅ DNAT (-p) | 1 host; isolamento + publish |
| host | ✖ | ✖ (usa porta real) | Compartilha stack do host |
| none | ✖ | ✖ | Só loopback |
| macvlan | ✖ | n/a | IP/MAC próprios na LAN |
| ipvlan | ✖ | n/a | IP 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.