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

docker network create

DescripciónCrea una red
Usodocker 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ónPredeterminadoDescripción
--attachableAPI 1.25+ Habilita la conexión manual de contenedores
--aux-addressDirecciones IPv4 o IPv6 auxiliares utilizadas por el controlador de red
--config-fromAPI 1.30+ La red desde la cual copiar la configuración
--config-onlyAPI 1.30+ Crea una red solo de configuración
-d, --driverbridgeControlador (driver) para gestionar la red
--gatewayPuerta de enlace (gateway) IPv4 o IPv6 para la subred principal
--ingressAPI 1.29+ Crea una red de malla de enrutamiento (routing-mesh) Swarm
--internalRestringe el acceso externo a la red
--ip-rangeAsigna IPs de contenedores a partir de un subrango
--ipam-driverControlador de gestión de direcciones IP (IPAM)
--ipam-optEstablece opciones específicas del controlador IPAM
--ipv4trueHabilita o deshabilita la asignación de direcciones IPv4
--ipv6Habilita o deshabilita la asignación de direcciones IPv6
--labelEstablece metadatos en una red
-o, --optEstablece opciones específicas del controlador
--scopeAPI 1.30+ Controla el alcance (scope) de la red
--subnetSubred 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 redOpción del demonio para docker0Descripción
com.docker.network.bridge.name-Nombre del puente a usar al crear el puente Linux
com.docker.network.bridge.enable_ip_masquerade--ip-masqHabilita el enmascaramiento de IP
com.docker.network.bridge.enable_icc--iccHabilita o deshabilita la conectividad inter-contenedor
com.docker.network.bridge.host_binding_ipv4--ipIP por defecto al enlazar puertos de contenedores
com.docker.network.driver.mtu--mtuEstablece 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 redOpción del demonio para docker0Descripción
--gateway-Puerta de enlace IPv4 o IPv6 para la subred principal
--ip-range--fixed-cidr, --fixed-cidr-v6Asigna direcciones IP desde un rango
--internal-Restringe el acceso externo a la red
--ipv4-Habilita o deshabilita la asignación de direcciones IPv4
--ipv6--ipv6Habilita o deshabilita la asignación de direcciones IPv6
--subnet--bip, --bip6Subnet 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