Metodologia 19/10/2025

Docker Compose: Networking Avançado e Resolução de Nomes

Explore o networking no Docker Compose, desde a configuração padrão até a resolução de nomes customizada, otimizando a comunicação entre serviços.
EQ
Por Equipe Midiaville
Especialistas em desenvolvimento web
17 de Outubro de 2025

Metodologia

No mundo do desenvolvimento web moderno, a conteinerização se tornou uma prática essencial. O Docker, em particular, revolucionou a maneira como as aplicações são construídas, distribuídas e executadas. Dentro do ecossistema Docker, o Docker Compose simplifica a orquestração de múltiplos containers, permitindo que você defina e gerencie aplicações complexas com facilidade. Um aspecto crucial do Docker Compose é o networking, que permite que os containers se comuniquem entre si e com o mundo externo.

Este artigo explora o networking no Docker Compose, desde a configuração padrão até técnicas avançadas para personalizar a resolução de nomes e atribuir IPs estáticos aos seus serviços. Compreender esses conceitos é fundamental para construir aplicações robustas e escaláveis que aproveitam ao máximo o poder do Docker.

Networking Padrão no Docker Compose

Quando você utiliza o Docker Compose, uma rede padrão é automaticamente criada para os seus serviços. Esta rede, geralmente nomeada como {nome-da-pasta}_default, facilita a comunicação entre os containers sem a necessidade de configurações adicionais. Cada serviço definido no arquivo docker-compose.yml é automaticamente conectado a esta rede.

A grande vantagem desta configuração padrão é a resolução de nomes integrada. Isso significa que um serviço pode acessar outro simplesmente usando o nome do serviço definido no arquivo docker-compose.yml. Por exemplo, se você tem um serviço chamado service-a e outro chamado service-b, o service-a pode se comunicar com o service-b usando o nome service-b como um hostname.

Internamente, o Docker atribui automaticamente um endereço IP a cada container dentro da rede. No entanto, você não precisa se preocupar com esses endereços IP diretamente, pois a resolução de nomes cuida de traduzir o nome do serviço para o endereço IP correspondente. Imagine que service-a recebe o IP 172.18.0.1 e service-b recebe o IP 172.18.0.2. O service-a pode simplesmente usar http://service-b:1080 para se comunicar com o service-b na porta 1080.

Acessando Serviços de Fora da Rede Docker

É importante notar que a resolução de nomes interna à rede Docker não se aplica fora da rede. Ou seja, da sua máquina host, você não pode usar o nome do serviço para acessá-lo diretamente. Para isso, é necessário mapear as portas do container para a sua máquina host. Isso é feito através da diretiva ports no arquivo docker-compose.yml. Por exemplo, 4080:1080 mapeia a porta 1080 do container para a porta 4080 da sua máquina host. Assim, você pode acessar o service-b através de localhost:4080.

Personalizando o Networking: Aliases e IPs Estáticos

Em alguns cenários, a configuração padrão de networking pode não ser suficiente. Por exemplo, você pode ter requisitos específicos de segurança, desempenho ou compatibilidade que exigem um controle mais granular sobre a rede. Nesses casos, o Docker Compose oferece a flexibilidade de personalizar o networking através de aliases e IPs estáticos.

Aliases de Rede

Um alias é um nome alternativo que você pode atribuir a um serviço dentro da rede Docker. Isso pode ser útil para simplificar a configuração de outros serviços ou para garantir compatibilidade com aplicações legadas que esperam um determinado nome de host. Para definir um alias, você pode adicionar a diretiva aliases na seção networks do seu serviço no arquivo docker-compose.yml.

Por exemplo:


service-b:
  image: ...
  networks:
    default:
      ports:
        - 4080:1080
      aliases:
        - service-b.local

Com esta configuração, o service-a poderá acessar o service-b tanto pelo nome service-b quanto pelo alias service-b.local.

Atribuindo IPs Estáticos

Em situações mais complexas, você pode precisar atribuir IPs estáticos aos seus serviços. Isso pode ser necessário para garantir a previsibilidade do endereço IP ou para configurar regras de firewall específicas. Para atribuir um IP estático, você precisa definir uma sub-rede e configurar o driver de IPAM (IP Address Management) para gerenciar os endereços IP.

A configuração no docker-compose.yml ficaria assim:


services:
  service-a:
    image: ...
    networks:
      default:
        ipv4_address: 172.21.0.10
    environment:
      SERVICE_B_URL: http://service-b:1080

  service-b:
    image: ...
    networks:
      default:
        ipv4_address: 172.21.0.20
      aliases:
        - service-b.local
    ports:
      - 4080:1080

networks:
  default:
    ipam:
      driver: default
      config:
        - subnet: 172.21.0.0/24

Neste exemplo, definimos uma sub-rede 172.21.0.0/24 e atribuímos os IPs 172.21.0.10 ao service-a e 172.21.0.20 ao service-b. O ipam define que o Docker irá gerenciar os IPs manualmente dentro desta subnet.

Configurando a Resolução de Nomes com extra_hosts

Mesmo com IPs estáticos, você ainda precisa garantir que o service-a possa resolver o nome service-b.local para o endereço IP correto. Para isso, você pode usar a diretiva extra_hosts no arquivo docker-compose.yml.


service-a:
  image: ...
  networks:
    default:
      ipv4_address: 172.21.0.10
  extra_hosts:
    - "service-b.local:172.21.0.20"
  environment:
    SERVICE_B_URL: http://service-b:1080

A diretiva extra_hosts adiciona uma entrada no arquivo /etc/hosts do container service-a, mapeando o nome service-b.local para o endereço IP 172.21.0.20. Isso garante que o service-a possa acessar o service-b usando o nome service-b.local.

  • Subnet: Define o intervalo de endereços IP disponíveis para a rede.
  • IPAM (IP Address Management): Permite que o Docker gerencie os endereços IP da rede.
  • extra_hosts: Adiciona entradas ao arquivo /etc/hosts do container, permitindo a resolução de nomes customizada.

Conclusão

O networking no Docker Compose é um aspecto fundamental para construir aplicações complexas e escaláveis. Compreender a configuração padrão e as opções de personalização permite que você adapte o networking às necessidades específicas do seu projeto. Seja utilizando a resolução de nomes integrada, definindo aliases ou atribuindo IPs estáticos, o Docker Compose oferece as ferramentas necessárias para criar uma infraestrutura de rede robusta e flexível.

À medida que a tecnologia de conteinerização evolui, podemos esperar ainda mais avanços nas capacidades de networking do Docker. A integração com redes definidas por software (SDN) e a automação da configuração de redes complexas são áreas promissoras que podem simplificar ainda mais o desenvolvimento e a implantação de aplicações conteinerizadas. Manter-se atualizado com essas tendências é essencial para aproveitar ao máximo o poder do Docker e construir aplicações inovadoras e escaláveis.

Compartilhe este artigo

Artigos Relacionados

Continue explorando nossos insights sobre desenvolvimento web e estratégias digitais

Precisa de Uma Solução Personalizada?

Nossa equipe especializada está pronta para desenvolver a solução ideal para o seu negócio.