Skip to main content

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?

  1. 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.

  2. 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: true evita que o Compose tente recriá-la.

  3. Orquestração com Múltiplos Compose Files: Se você está rodando diferentes docker-compose.yml e 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. 🚀