Configuration de Docker pour ne pas utiliser la plage 172.17.0.0

22

En raison de problèmes avec les portails captifs et la plage IP par défaut de Docker, j'essaie de faire en sorte que Docker utilise la plage 198.18.0.0, au lieu de 172.17.0.0, qui se heurte aux portails captifs utilisés dans les trains où je vis.

En suivant les documents , j'ai créé /etc/docker/daemon.jsonet mis les éléments suivants:

{
    "bip":"198.18.0.0/16"
}

Cela a fonctionné pour docker0, mais il ne semble avoir affecté aucun des autres réseaux, et en utilisant docker, le premier réseau créé est 172.17.0.0, qui recrée le choc.

Que puis-je faire pour changer le sous-réseau par défaut pour tous les réseaux dockers (de préférence sans avoir à indiquer ma plage IP personnalisée dans chaque fichier de composition)?

jrtapsell
la source

Réponses:

27

Il est possible de redéfinir la plage par défaut.

$ docker -v
Docker version 18.06.0-ce, build 0ffa825

Modifiez ou créez un fichier de configuration pour le démon Docker:

# nano /etc/docker/daemon.json

Ajouter des lignes:

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

Redémarrez dockerd:

# service docker restart

Vérifiez le résultat:

$ docker network create foo
$ docker network inspect foo | grep Subnet
                    "Subnet": "10.10.1.0/24"

Cela fonctionne aussi pour docker-compose. Plus d'informations ici https://github.com/moby/moby/pull/29376 (fusionné)

rNix
la source
1
10.10.0.0/16 chevauche les réseaux mondiaux par défaut. Vous pouvez utiliser {"base": "192.168.0.0/16","size":24}. Veuillez consulter github.com/moby/moby/blob/…
Root G
11

Il y a trois endroits où le docker générera des sous-réseaux de réseau.

  • Le pont par défaut
  • Réseaux de ponts générés par l'utilisateur
  • Réseaux de superposition générés en mode essaim

Pour le pont par défaut (appelé "bridge"), vous pouvez spécifier BIP (je pense que c'est Bridge IP; assurez-vous qu'il s'agit d'une IP hôte, pas d'une IP réseau ) dans le daemon.jsonfichier. Et pour les réseaux de ponts générés par l'utilisateur, vous pouvez définir un pool de sous-réseaux à choisir (en supposant que l'utilisateur ne spécifie pas manuellement un sous-réseau). Pour ces deux, votre /etc/docker/daemon.jsonressemblerait à:

{
  "bip": "10.200.0.1/24",
  "default-address-pools":[
    {"base":"10.201.0.0/16","size":24},
    {"base":"10.202.0.0/16","size":24}
  ]
}

Chaque paramètre de pool d'adresses ci-dessus définit une plage CIDR et la taille des sous-réseaux à allouer à partir de cette plage. Ainsi, ce qui précède définit deux plages de classe B qui sont allouées en tant que réseaux de classe C (/ 24). Vous avez besoin d'au moins 18,06 pour les pools d'adresses par défaut. Vous devrez recharger le démon docker pour que cette modification s'applique ( systemctl reload docker). Et cette modification ne modifiera que les réseaux d'utilisateurs nouvellement créés, vous devrez donc arrêter les conteneurs et supprimer les réseaux existants dans la mauvaise plage.


Dans 18.09, Docker a ajouté la possibilité de spécifier la plage d'adresses pour les réseaux de superposition générés en mode essaim. Cela ne peut être fait qu'au moment de la création de l'essaim en ce moment, espérons qu'il sera mis à jour à l'avenir pour permettre docker swarm updated'ajuster ces pools:

$ docker swarm init \
  --default-addr-pool 10.202.0.0/16 \
  --default-addr-pool 10.203.0.0/16 \
  --default-addr-pool-mask-length 24
BMitch
la source
1
Grand résumé des options 2018/2019 actuelles. En outre, si vous utilisez Docker Desktop, l' bipoption dans l'interface graphique Paramètres / Préférences. Car default-address-poolsvous pouvez éditer le daemon.json manuellement dans cette même interface graphique, et pour les essaims, default-addr-poolvous les modifiez toujours avec la initcommande.
Bret Fisher
1

Configurer le réseau de pont par défaut : "… Pour configurer le réseau de pont par défaut, vous spécifiez des options dans daemon.json. Voici un exemple daemon.json avec plusieurs options spécifiées. Spécifiez uniquement les paramètres que vous devez personnaliser.…"

Avec compose: Spécifiez des réseaux personnalisés : "… Au lieu d'utiliser simplement le réseau d'application par défaut, vous pouvez spécifier vos propres réseaux avec la clé de réseau de niveau supérieur. Cela vous permet de créer des topologies plus complexes et de spécifier des pilotes et options de réseau personnalisés. Vous pouvez également l'utiliser pour connecter des services à des réseaux créés en externe qui ne sont pas gérés par Compose.… "

poige
la source
Est-il possible de changer la plage IP utilisée pour les réseaux implicites utilisés par docker-compose, et ceux qui n'ont pas la plage définie explicitement?
jrtapsell
-1

Cela peut être un peu brutal mais je fais simplement un sudo ifconfig docker0 downpour fermer l'interface qui entre en conflit avec le wifi que j'essaie d'utiliser.

Falko Menge
la source
La question est d'utiliser une autre gamme, pas de désactiver la mise en réseau.
RalfFriedl
@RalfFriedl C'est vrai. Mais en tant que voyageur fréquent qui utilise de nombreux réseaux wifi différents, j'ai vu toutes sortes de plages de ports en conflit. Ainsi, au lieu de rechercher une plage de ports, vous pouvez également désactiver temporairement le réseau.
Falko Menge