Port Mapping no Docker: O Guia Explosivo que Todo Dev Precisa Ler AGORA!

A gestão de portas no Docker e no Docker Compose é o segredo pouco revelado para garantir que os serviços containerizados estejam visíveis ao mundo exterior — quer esteja a desenvolver localmente ou em produção. Uma má configuração pode arruinar a segurança, causar conflitos imprevisíveis ou mesmo tornar serviços inacessíveis. Descubra agora como dominar a arte de mapear portas como um verdadeiro especialista DevOps.

Port Mapping: A Arma Secreta para Expor Serviços no Docker

O mapeamento de portas permite que aplicações em containers comuniquem com o exterior. Essencialmente, redireciona uma porta do sistema anfitrião para uma porta do container, tornando o serviço visível fora do ecossistema Docker.

Imagine dois containers a correr serviços distintos, ambos a usar a porta 80. Com o mapeamento adequado — digamos 8080 e 8090 no host — ambos tornam-se acessíveis de forma independente. Uma jogada genial para quem lida com múltiplos serviços.

Como Mapear Portas em Docker: O Comando Que Muda Tudo

Por defeito, um container possui um namespace de rede isolado. Para aceder a serviços externos, é necessário estabelecer uma ponte com o host. Eis o comando fundamental:

Bash
docker run -d -p 8080:80 nginx

Este comando mapeia a porta 8080 do host para a porta 80 do container. Simples e letal. Para aceder, basta abrir http://localhost:8080.

Se a imagem usar bem o comando EXPOSE, pode usar:

Bash
docker run -d --publish-all hello-world

O Docker irá seleccionar automaticamente uma porta aleatória no host para mapear com as portas expostas no Dockerfile.

Mapeamento com Docker Compose: Configuração Profissional

Docker Compose permite definir tudo num único ficheiro docker-compose.yml. O truque? A directiva ports.

Bash
version: '3.8'
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"

Porta 80 no container? Exposta no host pela 8080. Impecável.

Expose vs Ports: A Confusão Fatal

Cuidado! expose NÃO é igual a ports.

Bash
services:
  app:
    image: myapp
    expose:
      - "3000"

Neste cenário, a porta 3000 está acessível apenas a outros containers na mesma rede. Para o exterior? Nada feito. Só ports faz o trabalho completo.

Mapear Várias Portas? Sim, É Possível!

Se o seu container gere múltiplos serviços, mapeie várias portas:

Bash
docker run -p 8080:80 -p 443:443 nginx

O Nginx agora responde a HTTP (8080 → 80) e HTTPS (443 → 443).

Especificar o IP do Host: Controle Total

Quer limitar o acesso a uma interface específica?

Bash
docker run -p 192.168.1.100:8080:80 nginx

Este comando restringe o acesso à IP 192.168.1.100. Ideal para ambientes com múltiplas interfaces.

Mapeamento de Faixas de Portas: A Solução para Clusters

Precisa de várias portas consecutivas? O Docker trata disso:

Bash
docker run -p 5000-5100:5000-5100 nginx

Perfeito para clusters ou aplicações multi-endpoint.

Portas Diferentes no Host e no Container: A Estratégia Anticonflitos

Evite conflitos ou exponha serviços com mais segurança:

Bash
docker run -p 8081:80 nginx

Aqui, o container usa a porta 80, mas expõe-na como 8081 no host. Estratégico e eficaz.

UDP no Docker: Para Quem Precisa de Latência Mínima

Docker também permite mapear portas UDP, essenciais para DNS ou jogos online:

Bash
docker run -p 53:53/udp ubuntu/bind9

Simples, direto e vital para serviços baseados em UDP.

Verificar o Mapeamento: Confirme Se Está Tudo OK

Use o comando:

Bash
docker ps

Veja as colunas de PORTS. Quer detalhes mais profundos?

Bash
docker inspect <container_id> | grep "Host"

Revela todas as ligações ativas entre o host e os containers. Transparência total.

Artigos Relacionados