Voici donc votre problème :
Docker a attribué la plage 172.17.0.1/16
à votre docker0
interface. Cela inclut toutes les adresses de 172.17.0.1
à 172.17.255.255
. Vous remarquerez que cette plage inclut vos serveurs DNS (172.17.100.3
et 172.17.100.70
). Vous avez un problème de routage :
Chaque fois que votre hébergeur a besoin d'accéder à vos serveurs DNS, il voit qu'il a déjà une interface sur le même réseau (docker0
), il essaie donc d'acheminer les paquets en utilisant cette interface... qui bien sûr ne va nulle part, c'est pourquoi votre DNS cesse de fonctionner.
Docker ne dispose pas d'un mécanisme simple pour exclure une plage d'adresses de son processus de sélection automatique, vous devrez donc probablement faire deux choses pour résoudre le problème :
Tout d'abord, définissez explicitement l'adresse de docker0
dans votre /etc/docker/daemon.json
. Utilisez n'importe quel réseau qui n'entre pas en conflit avec vos réseaux internes. Ex. :
{
"bip": "172.31.0.1/16"
}
Vous devrez redémarrer Docker.
Ensuite, pour empêcher Docker de sélectionner la même plage de réseau pour un réseau défini par l'utilisateur (un réseau que vous créez explicitement à l'aide de docker network create
ou implicitement en utilisant, par exemple, docker-compose
ou docker stack ...
), créez un nouveau réseau et ne l'utilisez jamais :
docker network create --subnet 172.17.0.0/16 --config-only do_not_use
Cela devrait à la fois résoudre votre problème et l'empêcher de se reproduire à l'avenir.
Mettre à jour
Docker documente en fait une meilleure façon d'y parvenir dans Comment puis-je influencer les plages d'adresses réseau choisies par Docker lors d'une "création de réseau docker" ?.
Cela nécessite de définir des itinéraires statiques persistants sur votre système, qui varient selon les distributions Linux.