Mam setki kontenerów w różnych programowych przełącznikach wirtualnych. Chciałbym wiedzieć, czy można dowiedzieć się, który numer vnet należy do którego kontenera dokującego. Obecnie wykrywam to, obserwując syslog podczas tworzenia każdego kontenera. W KVM znajduje się polecenie „virsh domiflist”, właśnie tego szukam.
Dziękuję, ale z jakiegoś powodu nie zawsze działa. Mam 50 pojemników, a powyższy skrypt zwróci 1 lub 2 puste miejsca. Kiedy patrzę na wartość iflink dla obu kontenerów, nie są one +1 od wartości uzyskanej z wnętrza kontenera.
user2066671,
To przypuszczenie: może to być problem z czasem. Jeśli kontenery są tworzone zbyt szybko po sobie, przypisanie iflinkwartości może się nie zsynchronizować. System może przypisać dwie kolejne iflinkwartości do dwóch kontenerów zamiast na przemian między kontenerem a systemem.
NZD
To interesujące, tworzę i uruchamiam kontenery w pętli for, ostatni kontener iflink jest zawsze bardzo różny. Na przykład iflink z / sys / class / net / veth ### / iflink zwraca 4205, ale kontener / sys / class / eth0 / iflink pokazuje 4216
user2066671
Bije mnie Wypróbowałem kilka rzeczy: założyłem kilka pojemników, sprawdziłem, czy iflinkładnie się układa. Zatrzymałem kilka kontenerów i stworzyłem kilka nowych, sprawdziłem, czy iflinknadal ładnie się układa. Mam 115 uruchomionych kontenerów, a mój najwyższy iflinkto 244. Jak dostać się do 4216?
NZD
Sprawdziłem także post, z którego otrzymałem informacje. Stwierdza: „Można to ustalić, dopasowując iflinkwartość interfejsu kontenera do wartości vethinterfejsu ifindex interfejsu hosta ”. Mój skrypt używa iflinkobu. Może spróbuj „ifindex” dla „veth”?
NZD
3
wyszukuje wszystkie interfejsy w kontenerach.
#!/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
wartości może się nie zsynchronizować. System może przypisać dwie kolejneiflink
wartości do dwóch kontenerów zamiast na przemian między kontenerem a systemem.iflink
ładnie się układa. Zatrzymałem kilka kontenerów i stworzyłem kilka nowych, sprawdziłem, czyiflink
nadal ładnie się układa. Mam 115 uruchomionych kontenerów, a mój najwyższyiflink
to 244. Jak dostać się do 4216?iflink
wartość interfejsu kontenera do wartościveth
interfejsu ifindex interfejsu hosta ”. Mój skrypt używaiflink
obu. Może spróbuj „ifindex” dla „veth”?wyszukuje wszystkie interfejsy w kontenerach.
źródło
Używam innej metody, która wydaje się działać dobrze:
źródło