Takže tady je váš problém:
Docker přiřadil rozsah 172.17.0.1/16
do vašeho docker0
rozhraní. To zahrnuje všechny adresy z 172.17.0.1
až 172.17.255.255
. Všimněte si, že tento rozsah zahrnuje vaše servery DNS (172.17.100.3
a 172.17.100.70
). Máte problém se směrováním:
Kdykoli se váš hostitel potřebuje dostat k vašim serverům DNS, zjistí, že má rozhraní již ve stejné síti (docker0
), takže se snaží směrovat pakety pomocí tohoto rozhraní...které samozřejmě nikam nevedou, což je důvod, proč váš DNS přestává fungovat.
Docker nemá jednoduchý mechanismus pro vyloučení rozsahu adres z procesu automatického výběru, takže k vyřešení problému budete pravděpodobně muset udělat dvě věci:
Nejprve explicitně nastavte adresu docker0
ve vašem /etc/docker/daemon.json
. Použijte jakoukoli síť, která není v konfliktu s vašimi interními sítěmi. Např.:
{
"bip": "172.31.0.1/16"
}
Budete muset restartovat Docker.
Dále, abyste zabránili Dockeru ve výběru stejného rozsahu sítě pro uživatelem definovanou síť (kterou vytvoříte explicitně pomocí docker network create
nebo implicitně pomocí, např. docker-compose
nebo docker stack ...
), vytvořte novou síť a nikdy ji nepoužívejte:
docker network create --subnet 172.17.0.0/16 --config-only do_not_use
To by mělo vyřešit váš problém a zabránit jeho opětovnému oříznutí v budoucnu.
Aktualizovat
Docker ve skutečnosti dokumentuje pravděpodobně lepší způsob, jak toho dosáhnout v části Jak ovlivním rozsahy síťových adres, které Docker zvolí během „vytváření dockerové sítě“?.
To vyžaduje nastavení trvalých statických tras ve vašem systému, které se liší mezi distribucemi Linuxu.