Opraveno upgradem dockeru na poslední verzi. Nová verze:
[email protected] ~ # 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
veth
rozhraní ve vašem systému o 2, protože když Docker vytvoříveth
pá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
veth
rozhraní 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).