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

DriverDescriçãoCaso de uso
bridgeRede privada virtual no host. Containers se comunicam por nome (DNS)Padrão para containers isolados
hostContainer usa diretamente a rede do host, sem isolamentoAlta performance, baixa latência
noneSem interface de rede: totalmente isoladoWorkloads batch sem necessidade de rede
overlayConecta containers em múltiplos hosts Docker (Swarm/Kubernetes)Ambientes distribuídos
macvlanContainer recebe um endereço MAC próprio na rede físicaIntegraçã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/mydb

Comandos 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 prune

Publicaçã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 nginx

Comunicaçã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 compose

Segurança em redes Docker

  • Prefira redes customizadas em vez da rede bridge padrão (tem DNS, mais controle)
  • Use -p 127.0.0.1:port:port para 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

Referências