Opraveno upgradem dockeru na poslední verzi. Nová verze:
example@unixlinux.online ~ # docker version
Client:
Version: 1.8.1
API version: 1.20
Go version: go1.4.2
Git commit: d12ea79
Built: Thu Aug 13 02:35:49 UTC 2015
OS/Arch: linux/amd64
Server:
Version: 1.8.1
API version: 1.20
Go version: go1.4.2
Git commit: d12ea79
Built: Thu Aug 13 02:35:49 UTC 2015
OS/Arch: linux/amd64
Nyní se rozhraní odstraní společně s kontejnery. Stará osamocená rozhraní byla odstraněna ručně následujícím příkazem:
# ip link delete <ifname>
Jsou zde tři problémy:
-
Spuštění jednoho kontejneru by nemělo zvýšit počet
vethrozhraní ve vašem systému o 2, protože když Docker vytvořívethpár, jeden konec páru je izolován ve jmenném prostoru kontejneru a není viditelný z hostitele. -
Zdá se, že nemůžete spustit kontejner:
Error response from daemon: Cannot start container ... -
Docker by měl vyčistit
vethrozhraní automaticky.
Tato fakta mě nutí podezírat, že ve vašem prostředí je něco zásadně špatně. Můžete svou otázku aktualizovat podrobnostmi o tom, jakou distribuci používáte, kterou verzi jádra a kterou verzi Dockeru?
Jak mohu zjistit, která rozhraní jsou propojena se stávajícími kontejnery, a jak mohu odstranit další rozhraní, které bylo propojeno s odstraněnými kontejnery?
S ohledem na ruční smazání veth rozhraní:A veth rozhraní není most, takže jej samozřejmě nemůžete smazat pomocí brctl .
Chcete-li odstranit veth rozhraní:
# ip link delete <ifname>
Detekce „nečinných“ rozhraní je ožehavější problém, protože pokud se jen podíváte na provoz, je pravděpodobné, že omylem smažete něco, co se stále používalo, ale nevykazovalo příliš velkou aktivitu.
Myslím, že to, co byste ve skutečnosti chtěli hledat, je veth rozhraní, jejichž partner je také viditelné v globálním síťovém jmenném prostoru. Můžete najít rovnocenného partnera veth rozhraní pomocí těchto pokynů a pak by bylo jednoduché zjistit, zda je toto rozhraní viditelné, a poté jedno nebo druhé smazat (smazání veth rozhraní také odstraní svého partnera).