Que sont les pools d’adresses Docker ?

Chaque réseau Docker dispose de sa propre plage d’adresses IP, appelée sous-réseau. Lorsque vous créez un réseau sans choisir de sous-réseau, Docker en sélectionne un dans une liste intégrée de pools d’adresses qui commence par 172.17.0.0/16 et se poursuit jusqu’à 172.31.0.0/16 et 192.168.0.0/16. Cela fonctionne jusqu’à ce que la plage choisie entre en conflit avec autre chose, comme un VPN, un réseau professionnel ou une base de données accessible à une adresse fixe. Pour corriger ce problème pour tous les réseaux en une seule fois, vous devez modifier les pools d’adresses dans les paramètres du daemon Docker.

Description de l’outil

Cet outil génère les paramètres daemon.json qui contrôlent les sous-réseaux utilisés par Docker. Saisissez une ou plusieurs plages de pools d’adresses ainsi que la taille de chaque réseau pour obtenir le paramètre default-address-pools. Vous pouvez également définir l’adresse du pont docker0 par défaut avec bip. L’outil indique combien de réseaux peuvent tenir dans vos pools et combien d’hôtes chaque réseau possède, vérifie vos données au fur et à mesure de la saisie et signale les plages susceptibles de provoquer des conflits. Tous les calculs sont effectués dans votre navigateur.

Exemples

Attribuez un /24 à tous les nouveaux réseaux à partir de 10.10.0.0/16, ce qui permet d’obtenir 256 réseaux avec 254 hôtes utilisables chacun :

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

Déplacez le pont par défaut vers une autre plage et utilisez deux pools :

{
  "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
    }
  ]
}

Fonctionnalités

  • Plusieurs plages de pools d’adresses à la fois, une par ligne
  • La taille des réseaux que Docker extrait de chaque pool
  • Adresse facultative pour le pont docker0 par défaut
  • Affichage du nombre de réseaux pouvant tenir dans les pools et du nombre d’hôtes utilisables dans chaque réseau
  • Avertissement concernant les plages publiques, les pools qui se chevauchent et les adresses dont les bits d’hôte sont définis
  • Téléchargement du résultat sous forme de fichier daemon.json

Fonctionnement

Une plage s’écrit sous la forme d’une adresse et d’une longueur de préfixe, par exemple 10.10.0.0/16. Le préfixe indique combien des 32 bits correspondent à la partie réseau, tandis que les bits restants servent à compter les hôtes. Chaque pool possède une plage de base et une taille de réseau. Docker divise la base en réseaux de cette taille et les attribue un par un. Ainsi, une base 10.10.0.0/16 avec une taille de 24 fournit 2^(24 − 16) = 256 réseaux. Un réseau /24 possède 256 adresses, dont 254 sont utilisables, car la première est l’adresse réseau et la dernière est l’adresse de diffusion. Docker utilise également la première adresse utilisable comme passerelle d’un réseau pont.

La taille ne peut pas être inférieure au préfixe de la base et est limitée à /30, car un réseau doit disposer de suffisamment d’espace pour une passerelle et au moins un conteneur.

Conseils

  • Choisissez des plages dans 10.0.0.0/8 ou 172.16.0.0/12 que votre VPN et votre réseau professionnel n’utilisent pas. Les plages proches de 192.168.0.0/16 sont les plus susceptibles d’entrer en conflit, car les routeurs domestiques et professionnels les utilisent
  • Le pont docker0 par défaut utilise toujours 172.17.0.0/16. Si cette plage entre en conflit avec votre réseau, définissez bip sur une autre adresse, par exemple 10.200.0.1/24
  • Enregistrez le résultat sous /etc/docker/daemon.json sur Linux, ou dans Paramètres → Docker Engine dans Docker Desktop, puis redémarrez Docker. Fusionnez-le avec les paramètres déjà présents dans le fichier au lieu de les remplacer
  • Une modification de default-address-pools ne concerne que les réseaux créés par la suite. Supprimez et recréez les réseaux existants pour les déplacer vers la nouvelle plage
  • Les pools qui se chevauchent sont difficiles à gérer, alors gardez-les séparés
  • Lorsque le message « tous les pools d’adresses prédéfinis ont été entièrement sous-réseautés » s’affiche, Docker n’a plus de plages disponibles. Ajoutez une base plus grande ou une taille de réseau plus petite pour obtenir davantage de réseaux