Connaître l'interface veth # d'un conteneur docker
11
J'ai des centaines de conteneurs dans divers commutateurs virtuels logiciels. Je voudrais savoir s'il est possible de savoir quel vnet # appartient à quel conteneur docker. En ce moment, je le détecte en regardant syslog à mesure que chaque conteneur est créé. Dans KVM, il y a une commande "virsh domiflist", c'est exactement ce que je recherche.
Merci, mais pour une raison quelconque, cela ne fonctionne pas toujours. J'ai 50 conteneurs et le script ci-dessus retournerait 1 ou 2 blancs. Quand je regarde la valeur iflink pour les deux conteneurs, ils ne sont pas +1 de la valeur obtenue de l'intérieur du conteneur.
user2066671
C'est une supposition: cela pourrait être un problème de timing. Si les conteneurs sont créés trop rapidement les uns après les autres, l'affectation des iflinkvaleurs peut se désynchroniser. Le système peut affecter deux iflinkvaleurs consécutives à deux conteneurs, au lieu d'alterner entre le conteneur et le système.
NZD
C'est intéressant, je crée et exécute les conteneurs dans une boucle for, le dernier conteneur iflink est toujours très différent. Par exemple, l'iflink de / sys / class / net / veth ### / iflink renvoie 4205, mais le conteneur / sys / class / eth0 / iflink affiche 4216
user2066671
Me bat. J'ai essayé quelques choses: démarrer un tas de conteneurs, vérifié que cela iflinks'accordait bien. Arrêté quelques conteneurs et créé quelques nouveaux, vérifié que iflinktoujours bien aligné. J'ai eu 115 conteneurs en marche et mon plus haut iflinkétait 244. Comment se rendre au 4216?
NZD
J'ai également vérifié le post dont j'ai obtenu les informations. Il indique: "Cela peut être découvert en faisant correspondre la iflinkvaleur d'une vethinterface de conteneur avec la valeur ifindex d'une interface hôte ". Mon script utilise iflinkpour les deux. Essayez peut-être «ifindex» pour «veth»?
NZD
3
recherche toutes les interfaces dans les conteneurs.
#!/bin/bash
for container in $(docker ps --format '{{.Names}}'); do
iflink=`docker exec -it $container bash -c 'cat /sys/class/net/eth*/iflink'`
for net in $iflink;do
net=`echo $net|tr -d '\r'`
veth=`grep -l $net /sys/class/net/veth*/ifindex`
veth=`echo $veth|sed -e 's;^.*net/\(.*\)/ifindex$;\1;'`
echo $container:$veth
done
done
iflink
valeurs peut se désynchroniser. Le système peut affecter deuxiflink
valeurs consécutives à deux conteneurs, au lieu d'alterner entre le conteneur et le système.iflink
s'accordait bien. Arrêté quelques conteneurs et créé quelques nouveaux, vérifié queiflink
toujours bien aligné. J'ai eu 115 conteneurs en marche et mon plus hautiflink
était 244. Comment se rendre au 4216?iflink
valeur d'uneveth
interface de conteneur avec la valeur ifindex d'une interface hôte ". Mon script utiliseiflink
pour les deux. Essayez peut-être «ifindex» pour «veth»?recherche toutes les interfaces dans les conteneurs.
la source
J'utilise une méthode différente, qui semble très bien fonctionner:
la source