Maison > Article > Opération et maintenance > Modifier la passerelle par défaut du Docker
Contexte de l'article :
L'une des confusions les plus courantes que nous rencontrons lors de l'utilisation de Docker dans un réseau local est qu'il y a parfois une panne de réseau entre les segments du réseau. . La raison en est que la passerelle générée par Docker par défaut entre parfois en conflit avec notre segment LAN. Par exemple, si Docker est déployé sur une machine dans le segment de réseau 172.16 et que le pont docker0 résultant est le segment de réseau 172.17, alors c'est la même chose. comme celui utilisé dans l'environnement réel. Il existe un conflit entre les machines du segment réseau (c'est-à-dire que la machine du segment réseau 172.17 ne peut pas recevoir de requête ping).
(Tutoriel recommandé : tutoriel docker )
Afin d'éviter les conflits, la première chose qui vient à l'esprit est de changer de passerelle, comme suit (en prenant Centos comme un exemple) :
service docker stop # 删除docker防火墙过滤规则 iptables -t nat -F POSTROUTING # 删除docker默认网关配置 ip link set dev docker0 down ip addr del 172.17.0.1/16 dev docker0 # 增加新的docker网关配置 ip addr add 192.168.2.1/24 dev docker0 ip link set dev docker0 up # 检测是否配置成功,如果输出信息中有 192.168.5.1,则表明成功 ip addr show docker0 service docker start # 验证docker防火墙过滤规则
Après cette modification, sera-t-il fiable ? La réponse est non, car après le redémarrage de Docker, Docker0 peut encore être reconstruit, écrasant les modifications que nous avons apportées. Cela montre que les règles IP de Docker sont codées en dur et que nous ne sommes pas autorisés à les modifier à volonté. Mais changeons notre façon de penser, tuons directement docker0 et reconstruisons un nouveau pont :
Nous devons d'abord installer l'outil de création de pont brctl :
sudo yum install -y bridge-utils
Démarrer l'opération de création :
# 1.停止 Docker 服务 service docker stop # 2.创建新的网桥(新的网段) brctl addbr bridge0 ip addr add 192.168.2.1/24 dev bridge0 ip link set dev bridge0 up # 3.确认网桥信息 ip addr show bridge0 # 4.修改配置文件 /etc/docker/daemon.json(如不存在则创建一个 touch daemon.json),使Docker启动时使用自定义网桥 { "bridge": "bridge0" } # 5.重启 Docker service docker start # 确认 NAT 网络路由 iptables -t nat -L -n # 6.删除不再使用的网桥 ip link set dev docker0 down brctl delbr docker0 iptables -t nat -F POSTROUTING
Concernant la configuration modifiée faite à l'étape 4, il s'agit de référencer le nouveau pont réseau. En fait, vous pouvez également référencer le nouveau pont réseau dans le fichier de configuration du docker :
echo 'DOCKER_OPTS="-b=bridge0"' >> /etc/sysconfig/docker sudo service docker start
Mais cela ne veut pas dire que. nous pourrons certainement voir le fichier de configuration personnalisé de docker. S'il n'y a pas de default/docker ou sysconfig/docker, ce sera plus gênant. La solution est la suivante :
$ vi /lib/systemd/system/docker.service #添加一行 $ EnvironmentFile=-/etc/default/docker 或者 $ EnvironmentFile=-/etc/sysconfig/docker #-代表ignore error #并修改 $ ExecStart=/usr/bin/docker daemon -H fd:// #改成 $ ExecStart=/usr/bin/docker daemon -H fd:// $DOCKER_OPTS #这样才能使用/etc/default/docker里定义的DOCKER_OPTS参数 $ systemctl daemon-reload 重载 $ sudo service docker restart
a terminé la création de. bridge0 et la transition de docker0 à bridge0, nous pouvons alors l'acheminer pour confirmer si nous Le segment de réseau 172.17 que nous ne voulons pas voir :
Tant qu'il n'est pas là, alors nous ne serons pas seulement connectés aux machines du segment de réseau 172.17. S'il y en a encore un, utilisez l'adresse IP del 172.17.0.1/16 dev docker0 jusqu'à ce qu'elle soit effacée (car un nouveau pont Docker a été établi, la suppression de l'ancien n'affectera pas l'utilisation de Docker).
Si le pont réseau créé par brctl risque d'être perdu après le redémarrage de la machine, nous pouvons alors écrire la commande suivante dans le script de démarrage automatique Linux et l'exécuter à chaque redémarrage :
brctl addbr bridge0 ip addr add 192.168.2.1/24 dev bridge0 ip link set dev bridge0 up
Des scripts de démarrage automatique peuvent être ajoutés en ajoutant des instructions exécutables (telles que sh /opt/script.sh &) dans le fichier /etc/rc.local. De cette façon, pratiquement à chaque redémarrage de la machine, la création de bridge0 peut être garantie et le service Docker peut démarrer normalement.
De plus : si vous souhaitez simplement résoudre le conflit de segment de réseau IP et que vous ne souhaitez pas exécuter le processus compliqué ci-dessus, vous pouvez simplement modifier /etc/docker/daemon.json en ajoutant le contenu "bip". : "ip/netmask" pour changer le segment réseau du pont docker0, comme suit :
[root@iZ2ze278r1bks3c1m6jdznZ ~]# cat /etc/docker/daemon.json { "bip":"192.168.2.1/24" }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!