docker network create
| Descripción | Crea una red |
|---|---|
| Uso | docker network create [OPTIONS] NETWORK |
Descripción
Crea una red nueva. El DRIVER acepta bridge u overlay, que son los
controladores de red integrados. Si has instalado un controlador de red de terceros
o uno personalizado propio, también puedes especificar ese DRIVER aquí. Si no especificas la
opción --driver, el comando crea automáticamente una red bridge para ti.
Cuando instalas Docker Engine, se crea una red bridge automáticamente. Esta
red corresponde al puente docker0 en el que tradicionalmente se ha basado Docker Engine.
Cuando inicias un contenedor nuevo con docker run, este se conecta automáticamente a
esta red puente. No puedes eliminar esta red puente por defecto, pero puedes
crear nuevas usando el comando network create.
$ docker network create -d bridge my-bridge-network
Las redes puente (bridge) son redes aisladas en una única instalación de Docker Engine. Si
deseas crear una red que abarque varios hosts de Docker que ejecuten Docker
Engine, debes habilitar el modo Swarm y crear una red overlay. Para leer más
sobre redes overlay con el modo Swarm, consulta
"usar redes overlay".
Una vez habilitado el modo Swarm, puedes crear una red overlay con alcance de Swarm:
$ docker network create --scope=swarm --attachable -d overlay my-multihost-network
Por defecto, las redes con alcance de Swarm no permiten que se conecten contenedores iniciados manualmente. Esta restricción se añade para evitar que alguien con acceso a un nodo que no es administrador en el clúster Swarm ejecute un contenedor que pueda acceder a la pila de red de un servicio Swarm.
La opción --attachable utilizada en el ejemplo anterior deshabilita esta restricción
y permite que tanto los servicios de Swarm como los contenedores iniciados manualmente se conecten a
la red overlay.
Los nombres de red deben ser únicos. El demonio de Docker intenta identificar conflictos de nombres, pero esto no está garantizado. Es responsabilidad del usuario evitar conflictos de nombres.
Limitaciones de las redes overlay
Debes crear redes overlay con bloques /24 (por defecto), lo que te limita
a 256 direcciones IP, cuando creas redes utilizando el modo de endpoint basado en VIP por defecto.
Esta recomendación aborda las limitaciones con el modo swarm. Si
necesitas más de 256 direcciones IP, no aumentes el tamaño del bloque IP. Puedes
usar el modo de endpoint dnsrr con un balanceador de carga externo o usar múltiples
redes overlay más pequeñas. Consulta
Configurar descubrimiento de servicios
para obtener más información sobre los diferentes modos de endpoint.
Opciones
| Opción | Predeterminado | Descripción |
|---|---|---|
--attachable | API 1.25+ Habilita la conexión manual de contenedores | |
--aux-address | Direcciones IPv4 o IPv6 auxiliares utilizadas por el controlador de red | |
--config-from | API 1.30+ La red desde la cual copiar la configuración | |
--config-only | API 1.30+ Crea una red solo de configuración | |
-d, --driver | bridge | Controlador (driver) para gestionar la red |
--gateway | Puerta de enlace (gateway) IPv4 o IPv6 para la subred principal | |
--ingress | API 1.29+ Crea una red de malla de enrutamiento (routing-mesh) Swarm | |
--internal | Restringe el acceso externo a la red | |
--ip-range | Asigna IPs de contenedores a partir de un subrango | |
--ipam-driver | Controlador de gestión de direcciones IP (IPAM) | |
--ipam-opt | Establece opciones específicas del controlador IPAM | |
--ipv4 | true | Habilita o deshabilita la asignación de direcciones IPv4 |
--ipv6 | Habilita o deshabilita la asignación de direcciones IPv6 | |
--label | Establece metadatos en una red | |
-o, --opt | Establece opciones específicas del controlador | |
--scope | API 1.30+ Controla el alcance (scope) de la red | |
--subnet | Subred en formato CIDR que representa un segmento de red |
Ejemplos
Conectar contenedores
Al iniciar un contenedor, usa la opción --network para conectarlo a una red.
Este ejemplo añade el contenedor busybox a la red mynet:
$ docker run -itd --network=mynet busybox
Si deseas añadir un contenedor a una red después de que el contenedor ya esté
en ejecución, usa el subcomando docker network connect.
Puedes conectar múltiples contenedores a la misma red. Una vez conectados, los
contenedores pueden comunicarse utilizando únicamente la dirección IP o el nombre de otro contenedor.
Para redes overlay o complementos personalizados que admiten conectividad multi-host,
los contenedores conectados a la misma red multi-host pero lanzados desde diferentes
daemons también pueden comunicarse de esta manera.
Puedes desconectar un contenedor de una red usando el comando docker network disconnect.
Especificar opciones avanzadas
Al crear una red, Docker Engine crea una subred que no se superpone
para la red por defecto. Esta subred no es una subdivisión de una red existente.
Es puramente para fines de direccionamiento IP. Puedes anular este valor por defecto
y especificar los valores de la subred directamente usando la opción --subnet. En una
red bridge solo puedes crear una única subred:
$ docker network create --driver=bridge --subnet=192.168.0.0/16 br0
Adicionalmente, también puedes especificar las opciones --gateway, --ip-range y --aux-address.
$ docker network create \
--driver=bridge \
--subnet=172.28.0.0/16 \
--ip-range=172.28.5.0/24 \
--gateway=172.28.5.254 \
br0
Si omites la opción --gateway, Docker Engine selecciona una por ti dentro de
un grupo preferido. Para redes overlay y para complementos de controladores de red que
lo admitan, puedes crear múltiples subredes. Este ejemplo utiliza dos máscaras de subred
/25 para cumplir con la guía actual de no tener más de 256 IPs en
una sola red overlay. Cada una de las subredes tiene 126 direcciones utilizables.
$ docker network create -d overlay \
--subnet=192.168.10.0/25 \
--subnet=192.168.20.0/25 \
--gateway=192.168.10.100 \
--gateway=192.168.20.100 \
--aux-address="my-router=192.168.10.5" --aux-address="my-switch=192.168.10.6" \
--aux-address="my-printer=192.168.20.5" --aux-address="my-nas=192.168.20.6" \
my-multihost-network
Asegúrate de que tus subredes no se superpongan. Si lo hacen, la creación de la red falla y Docker Engine devuelve un error.
Opciones del controlador Bridge
Al crear una red bridge personalizada, se pueden pasar las siguientes opciones adicionales.
Algunas de ellas tienen opciones equivalentes que se pueden usar en la línea de comandos de dockerd
o en daemon.json para configurar el puente por defecto, docker0:
| Opción de creación de red | Opción del demonio para docker0 | Descripción |
|---|---|---|
com.docker.network.bridge.name | - | Nombre del puente a usar al crear el puente Linux |
com.docker.network.bridge.enable_ip_masquerade | --ip-masq | Habilita el enmascaramiento de IP |
com.docker.network.bridge.enable_icc | --icc | Habilita o deshabilita la conectividad inter-contenedor |
com.docker.network.bridge.host_binding_ipv4 | --ip | IP por defecto al enlazar puertos de contenedores |
com.docker.network.driver.mtu | --mtu | Establece la MTU de red de los contenedores |
com.docker.network.container_iface_prefix | - | Establece un prefijo personalizado para interfaces |
Los siguientes argumentos se pueden pasar a docker network create para cualquier
controlador de red, nuevamente con sus equivalentes aproximados a las opciones del demonio de Docker
utilizadas para el puente docker0:
| Opción de creación de red | Opción del demonio para docker0 | Descripción |
|---|---|---|
--gateway | - | Puerta de enlace IPv4 o IPv6 para la subred principal |
--ip-range | --fixed-cidr, --fixed-cidr-v6 | Asigna direcciones IP desde un rango |
--internal | - | Restringe el acceso externo a la red |
--ipv4 | - | Habilita o deshabilita la asignación de direcciones IPv4 |
--ipv6 | --ipv6 | Habilita o deshabilita la asignación de direcciones IPv6 |
--subnet | --bip, --bip6 | Subnet para la red |
Por ejemplo, usemos las opciones -o o --opt para especificar un enlace de dirección IP
al publicar puertos:
$ docker network create \
-o "com.docker.network.bridge.host_binding_ipv4"="172.19.0.1" \
simple-network
Modo de red interna (--internal)
Los contenedores en una red interna pueden comunicarse entre sí, pero no con ninguna otra red, ya que no se configura ninguna ruta por defecto y se establecen reglas de firewall para descartar todo el tráfico hacia o desde otras redes. La comunicación con la dirección IP de la puerta de enlace (y, por lo tanto, los servicios del host configurados adecuadamente) es posible, y el host puede comunicarse directamente con cualquier IP de contenedor.
Por defecto, cuando conectas un contenedor a una red overlay, Docker también
conecta una red puente a ella para proporcionar conectividad externa. Si deseas
crear una red overlay aislada externamente, puedes especificar la opción
--internal.
Modo de red de entrada (--ingress)
Puedes crear la red que se utilizará para proporcionar la malla de enrutamiento (routing-mesh) en el
clúster Swarm. Lo haces especificando --ingress al crear la red. Solo
se puede crear una red ingress a la vez. La red se puede eliminar únicamente
si ningún servicio depende de ella. Cualquier opción disponible al crear una red overlay
también está disponible al crear la red ingress, a excepción de la opción --attachable.
$ docker network create -d overlay \
--subnet=10.11.0.0/16 \
--ingress \
--opt com.docker.network.driver.mtu=9216 \
--opt encrypted=true \
my-ingress-network
Ejecutar servicios en redes predefinidas
Puedes crear servicios en las redes predefinidas de Docker bridge y host.
$ docker service create --name my-service \
--network host \
--replicas 2 \
busybox top
Redes Swarm con controladores de alcance local
Puedes crear una red Swarm con controladores de red de alcance local. Lo haces
promoviendo el alcance de la red a swarm durante la creación de la red.
Luego podrás usar esta red al crear servicios.
$ docker network create -d bridge \
--scope swarm \
--attachable \
swarm-network
Para los controladores de red que proporcionan conectividad entre hosts (p. ej., macvlan), si se necesitan configuraciones específicas de nodo para implementar la red en cada host, proporcionarás esa configuración a través de una red que sea solo de configuración. Cuando crees la red con alcance Swarm, especificarás el nombre de la red que contiene la configuración.
node1$ docker network create --config-only --subnet 192.168.100.0/24 --gateway 192.168.100.115 mv-config
node2$ docker network create --config-only --subnet 192.168.200.0/24 --gateway 192.168.200.202 mv-config
node1$ docker network create -d macvlan --scope swarm --config-from mv-config --attachable swarm-network