Compartir comentarios
Las respuestas se generan en base a la documentación.

Define y administra redes en Docker Compose

Las redes ayudan a los servicios a comunicarse entre sí. De forma predeterminada, Compose configura una única red para tu aplicación. Cada contenedor de un servicio se une a la red predeterminada y es accesible por otros contenedores en esa red, además de ser detectable por el nombre del servicio. El elemento de nivel superior networks te ayuda a configurar redes con nombre que se pueden reutilizar en múltiples servicios.

Para usar una red en varios servicios, debes otorgar acceso explícitamente a cada servicio utilizando el atributo networks dentro del elemento de nivel superior services. El elemento de nivel superior networks tiene una sintaxis adicional que proporciona un control más detallado.

Ejemplos

Ejemplo básico

En el siguiente ejemplo, en tiempo de ejecución, se crean las redes front-tier y back-tier y el servicio frontend se conecta a las redes front-tier y back-tier.

services:
  frontend:
    image: example/webapp
    networks:
      - front-tier
      - back-tier

networks:
  front-tier:
  back-tier:

Ejemplo avanzado

services:
  proxy:
    build: ./proxy
    networks:
      - frontend
  app:
    build: ./app
    networks:
      - frontend
      - backend
  db:
    image: postgres:18
    networks:
      - backend

networks:
  frontend:
    # Especifica opciones del controlador
    driver: bridge
    driver_opts:
      com.docker.network.bridge.host_binding_ipv4: "127.0.0.1"
  backend:
    # Usa un controlador personalizado
    driver: custom-driver

Este ejemplo muestra un archivo de Compose que define dos redes personalizadas. El servicio proxy está aislado del servicio db porque no comparten ninguna red en común. Solo app puede comunicarse con ambos.

La red predeterminada

Cuando un archivo de Compose no declara redes explícitas, Compose utiliza una red implícita default. Compose conecta los servicios sin una declaración explícita de networks a esta red default:

services:
  some-service:
    image: foo

Este ejemplo es equivalente a:

services:
  some-service:
    image: foo
    networks:
      default: {}
networks:
  default: {}

Puedes personalizar la red default con una declaración explícita:

networks:
  default:
    name: a_network # Usa un nombre personalizado
    driver_opts: # Pasa opciones al controlador para la creación de la red
      com.docker.network.bridge.host_binding_ipv4: 127.0.0.1

Para ver las opciones, consulta la documentación de Docker Engine.

Atributos

attachable

Si attachable se establece en true, los contenedores independientes podrán conectarse a esta red, además de los servicios. Si un contenedor independiente se conecta a la red, puede comunicarse con los servicios y otros contenedores independientes que también estén conectados a ella.

networks:
  mynet1:
    driver: overlay
    attachable: true

driver

driver especifica qué controlador se debe usar para esta red. Compose devuelve un error si el controlador no está disponible en la plataforma.

networks:
  db-data:
    driver: bridge

Para obtener más información sobre los controladores y las opciones disponibles, consulta Controladores de red.

driver_opts

driver_opts especifica una lista de opciones como pares clave-valor para pasar al controlador. Estas opciones dependen del controlador.

networks:
  frontend:
    driver: bridge
    driver_opts:
      com.docker.network.bridge.host_binding_ipv4: "127.0.0.1"

Consulta la documentación de los controladores de red para obtener más información.

enable_ipv4

Requiere: Docker Compose 2.33.1 y posterior

enable_ipv4 se puede usar para desactivar la asignación de direcciones IPv4.

networks:
  ip6net:
    enable_ipv4: false
    enable_ipv6: true

enable_ipv6

enable_ipv6 habilita la asignación de direcciones IPv6.

networks:
  ip6net:
    enable_ipv6: true

external

Si se establece en true:

  • external especifica que el ciclo de vida de esta red se administra fuera del de la aplicación. Compose no intenta crear estas redes y devuelve un error si no existen.
  • Todos los demás atributos, excepto el nombre, son irrelevantes. Si Compose detecta cualquier otro atributo, rechaza el archivo de Compose por considerarlo inválido.

En el siguiente ejemplo, proxy es la puerta de enlace al mundo exterior. En lugar de intentar crear una red, Compose consulta a la plataforma por una red existente llamada outside y conecta los contenedores del servicio proxy a ella.

services:
  proxy:
    image: example/proxy
    networks:
      - outside
      - default
  app:
    image: example/app
    networks:
      - default

networks:
  outside:
    external: true

ipam

ipam especifica una configuración de IPAM personalizada. Este es un objeto con varias propiedades, cada una de las cuales es opcional:

  • driver: Controlador IPAM personalizado, en lugar del predeterminado.
  • config: Una lista con cero o más elementos de configuración, cada uno de los cuales contiene:
    • subnet: Subred en formato CIDR que representa un segmento de red.
    • ip_range: Rango de direcciones IP desde el cual asignar las IP de los contenedores.
    • gateway: Puerta de enlace IPv4 o IPv6 para la subred principal.
    • aux_addresses: Direcciones IPv4 o IPv6 auxiliares utilizadas por el controlador de red, representadas como un mapeo de nombre de host a IP.
  • options: Opciones específicas del controlador como un mapeo clave-valor.
networks:
  mynet1:
    ipam:
      driver: default
      config:
        - subnet: 172.28.0.0/16
          ip_range: 172.28.5.0/24
          gateway: 172.28.5.254
          aux_addresses:
            host1: 172.28.1.5
            host2: 172.28.1.6
            host3: 172.28.1.7
      options:
        foo: bar
        baz: "0"

internal

Por defecto, Compose proporciona conectividad externa a las redes. internal, cuando se establece en true, te permite crear una red aislada externamente.

labels

Añade metadatos a los contenedores usando labels. Puedes usar un array o un diccionario.

Se recomienda utilizar la notación DNS inversa para evitar que las etiquetas entren en conflicto con las utilizadas por otro software.

networks:
  mynet1:
    labels:
      com.example.description: "Financial transaction network"
      com.example.department: "Finance"
      com.example.label-with-empty-value: ""
networks:
  mynet1:
    labels:
      - "com.example.description=Financial transaction network"
      - "com.example.department=Finance"
      - "com.example.label-with-empty-value"

Compose establece las etiquetas com.docker.compose.project and com.docker.compose.network.

name

name establece un nombre personalizado para la red. El campo de nombre se puede usar para hacer referencia a redes que contienen caracteres especiales. El nombre se usa tal cual y no tiene como prefijo el nombre del proyecto.

networks:
  network1:
    name: my-app-net

También se puede utilizar junto con la propiedad external para definir la red de la plataforma que Compose debe recuperar, normalmente mediante el uso de un parámetro para que el archivo de Compose no tenga que codificar valores específicos del entorno de ejecución:

networks:
  network1:
    external: true
    name: "${NETWORK_ID}"

Recursos adicionales

Para obtener más ejemplos, consulta Redes en Compose.