¿Qué son los grupos de direcciones de Docker?

Cada red de Docker obtiene su propio intervalo de direcciones IP, llamado subred. Cuando creas una red sin elegir una subred, Docker toma una de una lista integrada de grupos de direcciones que comienza con 172.17.0.0/16 y continúa hasta 172.31.0.0/16 y 192.168.0.0/16. Esto funciona hasta que el intervalo elegido entra en conflicto con otra cosa, como una VPN, una red de oficina o una base de datos que utiliza una dirección fija. Para corregirlo en todas las redes a la vez, cambia los grupos de direcciones en la configuración del daemon de Docker.

Descripción de la herramienta

Esta herramienta genera la configuración de daemon.json que controla qué subredes utiliza Docker. Introduce uno o más intervalos de grupos de direcciones y el tamaño de cada red para obtener la configuración default-address-pools. También puedes establecer la dirección del puente docker0 predeterminado mediante bip. La herramienta muestra cuántas redes caben en tus grupos y cuántos hosts tiene cada red, comprueba los datos mientras escribes y señala los intervalos que probablemente causen conflictos. Todo se calcula en tu navegador.

Ejemplos

Asigna una red /24 a todas las redes nuevas a partir de 10.10.0.0/16, lo que permite crear 256 redes con 254 hosts utilizables cada una:

{
  "default-address-pools": [
    {
      "base": "10.10.0.0/16",
      "size": 24
    }
  ]
}

Mueve el puente predeterminado a otro intervalo y utiliza dos grupos:

{
  "bip": "10.200.0.1/24",
  "default-address-pools": [
    {
      "base": "10.10.0.0/16",
      "size": 24
    },
    {
      "base": "10.20.0.0/20",
      "size": 24
    }
  ]
}

Funciones

  • Varios intervalos de grupos de direcciones a la vez, uno por línea
  • El tamaño de las redes que Docker extrae de cada grupo
  • Dirección opcional para el puente docker0 predeterminado
  • Muestra cuántas redes caben en los grupos y cuántos hosts utilizables tiene cada red
  • Advierte sobre intervalos públicos, grupos superpuestos y direcciones con bits de host establecidos
  • Descarga el resultado como daemon.json

Cómo funciona

Un intervalo se escribe como una dirección y una longitud de prefijo, por ejemplo 10.10.0.0/16. El prefijo indica cuántos de los 32 bits corresponden a la red, y el resto se utiliza para contar los hosts. Cada grupo tiene un intervalo base y un tamaño de red. Docker divide la base en redes de ese tamaño y las asigna una por una, de modo que una base de 10.10.0.0/16 con tamaño 24 proporciona 2^(24 − 16) = 256 redes. Una red /24 tiene 256 direcciones, de las cuales 254 son utilizables, porque la primera es la dirección de red y la última es la dirección de difusión. Docker también utiliza la primera dirección utilizable como puerta de enlace de una red puente.

El tamaño no puede ser menor que el prefijo de la base y está limitado a /30, porque una red necesita espacio para una puerta de enlace y al menos un contenedor.

Consejos

  • Elige intervalos de 10.0.0.0/8 o 172.16.0.0/12 que no utilicen tu VPN ni tu red de oficina. Los intervalos cercanos a 192.168.0.0/16 son los que más probablemente entren en conflicto, porque los routers domésticos y de oficina los utilizan
  • El puente docker0 predeterminado siempre utiliza 172.17.0.0/16. Si entra en conflicto con tu red, establece bip en otra dirección, por ejemplo 10.200.0.1/24
  • Guarda el resultado como /etc/docker/daemon.json en Linux, o en Configuración → Docker Engine en Docker Desktop, y reinicia Docker. Combínalo con la configuración que ya existe en el archivo en lugar de reemplazarla
  • Un cambio de default-address-pools solo afecta a las redes que se creen posteriormente. Elimina y vuelve a crear las redes existentes para trasladarlas al nuevo intervalo
  • Los grupos que se superponen son difíciles de gestionar, así que mantenlos separados
  • Cuando veas «todos los grupos de direcciones predefinidos se han subdividido por completo», Docker se ha quedado sin intervalos. Añade una base más grande o un tamaño de red menor para obtener más redes