У меня есть сотни контейнеров в различных программных виртуальных коммутаторах. Я хотел бы знать, возможно ли выяснить, какой vnet # принадлежит какому контейнеру Docker. Прямо сейчас я обнаруживаю это, наблюдая за системным журналом, когда создается каждый контейнер. В KVM есть команда "virsh domiflist", которая именно то, что я ищу.
Спасибо, но по некоторым причинам это не всегда работает. У меня есть 50 контейнеров, и скрипт, приведенный выше, вернет 1 или 2 пробела. Когда я смотрю на значение iflink для обоих контейнеров, они не равны +1 от значения, полученного из контейнера.
user2066671
Это предположение: это может быть проблема времени. Если контейнеры создаются слишком быстро друг за другом, назначение iflinkзначений может быть не синхронизировано. Система может назначить два последовательных iflinkзначения двум контейнерам вместо чередования между контейнером и системой.
NZD
Это интересно, я создаю и запускаю контейнеры в цикле for, последний контейнер iflink всегда сильно отличается. Например, ссылка iflink из / sys / class / net / veth ### / iflink возвращает 4205, но ссылка контейнера / sys / class / eth0 / iflink показывает 4216
user2066671
Бьет меня Я попробовал несколько вещей: запустив кучу контейнеров, проверил, что iflinkвсе хорошо. Остановил несколько контейнеров и создал несколько новых, проверил, что iflinkвсе еще хорошо выстраивается. У меня работает 115 контейнеров, а мой самый высокий iflink- 244. Как добраться до 4216?
NZD
Я также проверил пост, из которого я получил информацию. В нем говорится: «Это можно выяснить, сопоставив значение интерфейса контейнера со iflinkзначением vethifindex интерфейса хоста». Мой сценарий использует iflinkдля обоих. Может быть, попробовать 'ifindex' для 'veth'?
NZD
3
ищет все интерфейсы в контейнерах.
#!/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
значений может быть не синхронизировано. Система может назначить два последовательныхiflink
значения двум контейнерам вместо чередования между контейнером и системой.iflink
все хорошо. Остановил несколько контейнеров и создал несколько новых, проверил, чтоiflink
все еще хорошо выстраивается. У меня работает 115 контейнеров, а мой самый высокийiflink
- 244. Как добраться до 4216?iflink
значениемveth
ifindex интерфейса хоста». Мой сценарий используетiflink
для обоих. Может быть, попробовать 'ifindex' для 'veth'?ищет все интерфейсы в контейнерах.
источник
Я использую другой метод, который, кажется, работает просто отлично:
источник