Hier ist also Ihr Problem:
Docker hat den Bereich 172.17.0.1/16
zugewiesen zu Ihrem docker0
Schnittstelle. Dazu gehören alle Adressen ab 172.17.0.1
bis 172.17.255.255
. Sie werden feststellen, dass dieser Bereich Ihre DNS-Server (172.17.100.3
und 172.17.100.70
). Was Sie haben, ist ein Routing-Problem:
Wann immer Ihr Host Ihre DNS-Server erreichen muss, sieht er, dass er bereits eine Schnittstelle im selben Netzwerk hat (docker0
), also versucht es, Pakete über diese Schnittstelle zu routen ... die natürlich nirgendwo hingehen, weshalb Ihr DNS nicht mehr funktioniert.
Docker hat keinen einfachen Mechanismus, um einen Adressbereich von seinem automatischen Auswahlprozess auszuschließen, daher müssen Sie wahrscheinlich zwei Dinge tun, um das Problem zu lösen:
Legen Sie zunächst explizit die Adresse von docker0
fest in Ihrem /etc/docker/daemon.json
. Verwenden Sie ein beliebiges Netzwerk, das nicht in Konflikt mit Ihren internen Netzwerken steht. Beispiel:
{
"bip": "172.31.0.1/16"
}
Sie müssen Docker neu starten.
Als Nächstes verhindern Sie, dass Docker denselben Netzwerkbereich für ein benutzerdefiniertes Netzwerk auswählt (eines, das Sie explizit mit docker network create
erstellen). oder implizit mit z. B. docker-compose
oder docker stack ...
), erstellen Sie ein neues Netzwerk und verwenden Sie es dann nie:
docker network create --subnet 172.17.0.0/16 --config-only do_not_use
Dies sollte sowohl Ihr Problem lösen als auch verhindern, dass es in Zukunft erneut auftritt.
Aktualisieren
Docker dokumentiert tatsächlich einen wohl besseren Weg, dies zu erreichen in Wie beeinflusse ich, welche Netzwerkadressbereiche Docker während einer „Docker-Netzwerkerstellung“ auswählt?.
Dies erfordert das Festlegen dauerhafter statischer Routen auf Ihrem System, die je nach Linux-Distribution variieren.