Propriedade external | Docker Network
- Propriedade external | Docker Network
No Docker Compose, a opção external dentro de networks é usada quando você deseja que um serviço use uma rede Docker já existente, em vez de o Compose criar uma nova automaticamente.
Para que serve external: true?
Quando você define:
networks:
minha-rede:
external: true
significa que o Docker não criará a rede minha-rede, pois assume que ela já existe. Se a rede não existir, o Compose lançará um erro.
Quando usar external: true?
-
Swarm Mode: Em Docker Swarm, redes são frequentemente criadas manualmente (
docker network create ...) e compartilhadas entre vários serviços. Se o Compose criar redes novas automaticamente, os serviços podem ficar isolados. -
Redes Compartilhadas: Se você já tem uma rede configurada manualmente com opções específicas (como driver overlay para múltiplos hosts ou configurações personalizadas), usar
external: trueevita que o Compose tente recriá-la. -
Orquestração com Múltiplos Compose Files: Se você está rodando diferentes
docker-compose.ymle quer que todos os serviços usem a mesma rede.
Exemplo prático
✅ Usando uma rede já existente
Se você já criou uma rede Docker chamada meu-sistema com:
docker network create meu-sistema
Então, no seu docker-compose.yml, pode referenciá-la assim:
version: "3.8"
services:
app:
image: minha-aplicacao
networks:
- minha-rede
networks:
minha-rede:
external: true
Agora, o Docker Compose não tentará criar essa rede. Ele apenas conectará o serviço app a meu-sistema.
Erro comum ao usar external: true
Se a rede não existir e você rodar docker-compose up -d, verá um erro:
ERROR: Network minha-rede declared as external, but could not be found
Para corrigir isso, crie a rede antes:
docker network create minha-rede
Conclusão
O external: true é útil quando você precisa que os containers compartilhem uma rede já existente, seja para comunicação entre serviços, Swarm, ou redes personalizadas. Mas você precisa criar a rede manualmente antes de usá-la. 🚀