Corrigé par la mise à niveau du docker vers la dernière version.Nouvelle version :
[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
Désormais, les interfaces sont supprimées avec les conteneurs. Les anciennes interfaces orphelines ont été supprimées manuellement par la commande suivante :
# ip link delete <ifname>
Il y a trois problèmes ici :
-
Le démarrage d'un seul conteneur ne doit pas augmenter le nombre de
veth
interfaces sur votre système par 2, car lorsque Docker crée unveth
paire, une extrémité de la paire est isolée dans l'espace de noms du conteneur et n'est pas visible depuis l'hôte. -
Il semble que vous ne parveniez pas à démarrer un conteneur :
Error response from daemon: Cannot start container ...
-
Docker devrait nettoyer le
veth
interfaces automatiquement.
Ces faits me font soupçonner qu'il y a quelque chose de fondamentalement mauvais dans votre environnement. Pouvez-vous mettre à jour votre question avec des détails sur la distribution que vous utilisez, la version du noyau et la version de Docker ?
Comment puis-je identifier quelles interfaces sont liées à des conteneurs existants et comment puis-je supprimer une interface supplémentaire qui était liée à des contraintes supprimées ?
En ce qui concerne la suppression manuelle de veth
interface :A veth
l'interface n'est pas un pont, donc bien sûr vous ne pouvez pas en supprimer un avec brctl
.
Pour supprimer un veth
interface :
# ip link delete <ifname>
La détection des interfaces "inactives" est un problème plus épineux, car si vous ne regardez que le trafic, vous risquez de supprimer accidentellement quelque chose qui était encore utilisé mais qui ne voyait pas beaucoup d'activité.
Je pense que ce que vous voudriez réellement rechercher est veth
interfaces dont le pair est aussi visible dans l'espace de noms du réseau global. Vous pouvez trouver le pair d'un veth
interface en utilisant ces instructions, puis il suffirait de voir si cette interface est visible, puis de supprimer l'une ou l'autre (supprimer un veth
l'interface supprimera également son homologue).