Finden der veth # -Schnittstelle eines Docker-Containers
11
Ich habe Hunderte von Containern in verschiedenen virtuellen Software-Switches. Ich würde gerne wissen, ob es möglich ist herauszufinden, welche vnet # zu welchem Docker-Container gehört. Im Moment erkenne ich das, indem ich Syslog beobachte, während jeder Container erstellt wird. In KVM gibt es einen Befehl "virsh domiflist", genau das, wonach ich suche.
Danke, aber es funktioniert aus irgendeinem Grund nicht immer. Ich habe 50 Container und das obige Skript würde 1 oder 2 Leerzeichen zurückgeben. Wenn ich mir den iflink-Wert für beide Container ansehe, sind sie nicht +1 von dem Wert, der aus dem Inneren des Containers erhalten wird.
user2066671
Dies ist eine Vermutung: Es könnte ein Zeitproblem sein. Wenn Container zu schnell nacheinander erstellt werden, ist die Zuweisung der iflinkWerte möglicherweise nicht mehr synchron. Das System kann iflinkzwei Containern zwei aufeinanderfolgende Werte zuweisen , anstatt zwischen dem Container und dem System zu wechseln.
NZD
Das ist interessant, ich erstelle und führe die Container in einer for-Schleife aus, der letzte Container iflink ist immer sehr unterschiedlich. Beispielsweise gibt der iflink von / sys / class / net / veth ### / iflink 4205 zurück, aber der / sys / class / eth0 / iflink des Containers zeigt 4216
user2066671
Schlägt mich. Ich habe ein paar Dinge ausprobiert: ein paar Container starten und überprüfen, ob iflinksie gut zusammenpassen. Habe ein paar Container angehalten und ein paar neue erstellt, verifiziert, dass sie iflinkimmer noch gut ausgerichtet sind. Ich habe 115 Container in Betrieb und mein höchster iflinkwar 244. Wie kommst du zu 4216?
NZD
Ich habe auch den Beitrag überprüft, von dem ich die Informationen erhalten habe. Darin heißt es: "Dies kann herausgefunden werden, indem der iflinkWert einer Containerschnittstelle mit vethdem ifindex-Wert einer Hostschnittstelle abgeglichen wird." Mein Skript verwendet iflinkfür beide. Vielleicht versuchen Sie 'ifindex' für 'veth'?
NZD
3
sucht nach allen Schnittstellen in Containern.
#!/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
Werte möglicherweise nicht mehr synchron. Das System kanniflink
zwei Containern zwei aufeinanderfolgende Werte zuweisen , anstatt zwischen dem Container und dem System zu wechseln.iflink
sie gut zusammenpassen. Habe ein paar Container angehalten und ein paar neue erstellt, verifiziert, dass sieiflink
immer noch gut ausgerichtet sind. Ich habe 115 Container in Betrieb und mein höchsteriflink
war 244. Wie kommst du zu 4216?iflink
Wert einer Containerschnittstelle mitveth
dem ifindex-Wert einer Hostschnittstelle abgeglichen wird." Mein Skript verwendetiflink
für beide. Vielleicht versuchen Sie 'ifindex' für 'veth'?sucht nach allen Schnittstellen in Containern.
quelle
Ich verwende eine andere Methode, die anscheinend gut funktioniert:
quelle