Quando voce cria um container e depois outro, eles podem nao se enxergar. O motivo quase sempre e a rede. Entender os tipos de rede que o Docker oferece resolve isso de uma vez.
Comece listando as redes que ja existem no seu Docker.
docker network ls
A rede bridge e a rede host vem de fabrica. Nenhuma delas oferece resolucao de nomes entre containers. Para isso voce precisa criar a sua propria rede.
docker network create minha-rede
Agora os containers que entrarem nessa rede conseguem se comunicar pelo nome do container.
docker run -d --name app1 --network minha-rede nginx
docker run -d --name app2 --network minha-rede alpine sleep 3600
Teste a comunicacao.
docker exec app2 ping app1 -c 2
O ping funciona. O DNS interno do Docker resolve app1 para o IP interno do container. Isso resolve 90% dos problemas de comunicacao.
A rede bridge padrao nao tem esse recurso. Crie sua propria rede sempre que precisar que containers se enxerguem.
Agora a rede host. Ela elimina o isolamento de rede. O container usa a placa do host diretamente, sem NAT e sem mapeamento de porta.
docker run -d --name web-host --network host nginx
O nginx fica acessivel em http://localhost:80 direto. Sem -p 80:80. Mas so um container pode usar cada porta, porque a porta e a do host de verdade.
Para ambientes com mais de uma maquina, existe a rede overlay. Ela precisa do Docker Swarm ou de um cluster.
docker swarm init
docker network create -d overlay rede-overlay
docker service create --name api --network rede-overlay --replicas 3 nginx
Os containers em maquinas diferentes se enxergam pelo nome como se estivessem na mesma maquina.
No dia a dia, a rede bridge personalizada resolve quase todo caso de uso. Host e para performance ou casos especificos. Overlay e para quando voce escala para mais de uma maquina.
That's all for now.
Thanks for reading!
Top comments (0)