Ideia central
O Docker possui seu próprio sistema de redes que permite containers se comunicarem entre si, com o host e com o mundo externo. Ao instalar o Docker, três redes padrão são criadas: bridge, host e none. Entender redes é essencial para arquitetar aplicações multi-container de forma segura.
Drivers de rede
| Driver | Descrição | Caso de uso |
|---|---|---|
bridge | Rede privada virtual no host. Containers se comunicam por nome (DNS) | Padrão para containers isolados |
host | Container usa diretamente a rede do host, sem isolamento | Alta performance, baixa latência |
none | Sem interface de rede: totalmente isolado | Workloads batch sem necessidade de rede |
overlay | Conecta containers em múltiplos hosts Docker (Swarm/Kubernetes) | Ambientes distribuídos |
macvlan | Container recebe um endereço MAC próprio na rede física | Integração com redes legadas |
Bridge network (padrão)
┌─────────────────────────────────────────────┐
│ Host │
│ │
│ ┌──────────┐ ┌──────────┐ │
│ │Container A│ │Container B│ │
│ │ 172.17.0.2│ │ 172.17.0.3│ │
│ └─────┬────┘ └────┬─────┘ │
│ └────────┬───────┘ │
│ docker0 (bridge) │
│ 172.17.0.1 │
│ │ │
│ NAT / iptables │
└─────────────────┼───────────────────────────┘
│
Internet
Na rede bridge padrão, containers se comunicam por IP. Em redes bridge customizadas, a comunicação é feita por nome do container (DNS automático), o que é muito mais confiável.
Redes customizadas (recomendado)
# Criar rede bridge customizada
docker network create minha-rede
# Criar container conectado à rede
docker run -d --name app --network minha-rede minha-app
docker run -d --name db --network minha-rede postgres:16
# Agora "app" pode chamar "db" pelo nome:
# postgres://db:5432/mydbComandos essenciais
# Listar redes
docker network ls
# Inspecionar uma rede (ver containers conectados, subnet, etc.)
docker network inspect minha-rede
# Conectar container a uma rede (mesmo em execução)
docker network connect minha-rede meu-container
# Desconectar container de uma rede
docker network disconnect minha-rede meu-container
# Remover rede
docker network rm minha-rede
# Remover redes não utilizadas
docker network prunePublicação de portas
A flag -p faz o mapeamento host_port:container_port:
# Porta 8080 do host → porta 80 do container
docker run -p 8080:80 nginx
# Bind apenas no localhost do host (mais seguro)
docker run -p 127.0.0.1:8080:80 nginx
# Porta aleatória do host
docker run -p 80 nginxComunicação entre serviços no Docker Compose
No Compose, cada serviço pode chamar os outros pelo nome do serviço. O Compose cria automaticamente uma rede bridge customizada para o projeto:
services:
api:
image: minha-api
# pode chamar "db:5432" diretamente
db:
image: postgres:16
# acessível como "db" dentro da rede do composeSegurança em redes Docker
- Prefira redes customizadas em vez da rede
bridgepadrão (tem DNS, mais controle) - Use
-p 127.0.0.1:port:portpara expor portas apenas localmente - Separe serviços em redes distintas quando não precisam se comunicar (princípio do menor privilégio)
- No Compose, use múltiplas redes para segmentar frontend, backend e banco de dados
Conexões
- docker-conceitos-fundamentais - Arquitetura geral
- docker-containers - Como containers se conectam a redes
- docker-compose - Gerenciamento de redes no Compose