Quindi ecco il tuo problema:
Docker ha assegnato l'intervallo 172.17.0.1/16
al tuo docker0
interfaccia. Questo include tutti gli indirizzi da 172.17.0.1
fino a 172.17.255.255
. Noterai che questo intervallo include i tuoi server DNS (172.17.100.3
e 172.17.100.70
). Quello che hai è un problema di routing:
Ogni volta che il tuo host ha bisogno di raggiungere i tuoi server DNS, vede che ha già un'interfaccia sulla stessa rete (docker0
), quindi tenta di instradare i pacchetti utilizzando quell'interfaccia... che ovviamente non vanno da nessuna parte, motivo per cui il tuo DNS smette di funzionare.
Docker non ha un meccanismo semplice per escludere un intervallo di indirizzi dal suo processo di selezione automatica, quindi probabilmente dovrai fare due cose per risolvere il problema:
Per prima cosa, imposta esplicitamente l'indirizzo di docker0
nel tuo /etc/docker/daemon.json
. Usa qualsiasi rete che non sia in conflitto con le tue reti interne. Ad esempio:
{
"bip": "172.31.0.1/16"
}
Dovrai riavviare Docker.
Successivamente, per impedire a Docker di selezionare lo stesso intervallo di rete per una rete definita dall'utente (quella creata esplicitamente utilizzando docker network create
o utilizzando implicitamente, ad esempio, docker-compose
o docker stack ...
), crea una nuova rete e poi non usarla mai:
docker network create --subnet 172.17.0.0/16 --config-only do_not_use
Questo dovrebbe risolvere il tuo problema e impedire che si ripresenti in futuro.
Aggiorna
Docker in realtà documenta un modo discutibilmente migliore per ottenere questo risultato in Come posso influenzare gli intervalli di indirizzi di rete scelti da Docker durante una "creazione della rete docker"?.
Ciò richiede l'impostazione di percorsi statici persistenti sul tuo sistema, che variano tra le distribuzioni Linux.