Gerenciando as Configurações de Porta do Container
Agora que entendemos como inspecionar e acessar serviços em containers, vamos explorar alguns conceitos adicionais de gerenciamento de portas.
Cenários Comuns de Gerenciamento de Portas
Aqui estão alguns cenários comuns que você pode encontrar:
1. Alterando Mapeamentos de Porta
Se a porta 8080 já estiver em uso no seu host, você pode mapear para uma porta diferente:
docker stop web-demo
docker rm web-demo
docker run -d --name web-demo -p 8081:80 nginx
Agora, o container Nginx é acessível na porta 8081:
curl localhost:8081
2. Vinculando a Interfaces Específicas
Em vez de vincular a todas as interfaces (0.0.0.0), você pode vincular a um IP específico:
docker stop web-demo
docker rm web-demo
docker run -d --name web-demo -p 127.0.0.1:8080:80 nginx
Isso vincula a porta do container apenas à interface localhost, tornando-a inacessível de fora do host.
3. Usando Portas Aleatórias do Host
Se você não se importa com qual porta do host é usada, deixe o Docker atribuir uma:
docker stop web-demo
docker rm web-demo
docker run -d --name web-demo -P nginx
A flag -P publica todas as portas expostas para portas aleatórias no host.
Verifique a porta atribuída:
docker port web-demo
Saída:
80/tcp -> 0.0.0.0:49153
O número exato da porta variará, mas neste exemplo, a porta 80 foi mapeada para a porta 49153.
Solucionando Problemas Comuns de Porta
Aqui estão soluções para problemas comuns relacionados a portas:
- Porta Já em Uso: Se você vir um erro como "port is already allocated", escolha uma porta diferente:
docker run -d --name another-web -p 8082:80 nginx
- Container Não Consegue Conectar ao Host: Se um container precisar se conectar a um serviço no host, use o nome DNS especial do Docker
host.docker.internal em vez de localhost:
docker run --rm alpine ping -c 2 host.docker.internal
- Verificando Qual Processo Usa uma Porta: Se uma porta já estiver em uso no host, encontre o processo:
sudo lsof -i :8080
Limpando
Vamos limpar nossos containers:
docker stop web-demo redis-demo
docker rm web-demo redis-demo