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-driverEste 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: fooEste 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.1Para 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: truedriver
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: bridgePara 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
enable_ipv4 se puede usar para desactivar la asignación de direcciones IPv4.
networks:
ip6net:
enable_ipv4: false
enable_ipv6: trueenable_ipv6
enable_ipv6 habilita la asignación de direcciones IPv6.
networks:
ip6net:
enable_ipv6: trueexternal
Si se establece en true:
externalespecifica 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: trueipam
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-netTambié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.