Поиск интерфейса veth# контейнера docker

У меня есть сотни контейнеров в различных программных виртуальных коммутаторах. Я хотел бы знать, можно ли узнать, какая виртуальная сеть# принадлежит какому контейнеру docker. Прямо сейчас я обнаруживаю это, наблюдая за syslog по мере создания каждого контейнера. В KVM есть команда "virsh domiflist", которая именно то, что я ищу.

2
задан user2066671
13.05.2023 21:42 Количество просмотров материала 3578
Распечатать страницу

3 ответа

iflink контейнера это же как ifindex на veth#.

вы можете узнать iflink контейнера следующим образом:

docker exec -it <container-name> bash -c 'cat /sys/class/net/eth0/iflink'

говорят, что результаты в 12, потом grep для этого:

grep -l 12 /sys/class/net/veth*/ifindex

это даст уникальный результат, по моей системе:

/sys/class/net/veth11d4238/ifindex

объедините это в скрипт:

#!/bin/bash

for container in $(docker ps -q); do
    iflink=`docker exec -it $container bash -c 'cat /sys/class/net/eth0/iflink'`
    iflink=`echo $iflink|tr -d '\r'`
    veth=`grep -l $iflink /sys/class/net/veth*/ifindex`
    veth=`echo $veth|sed -e 's;^.*net/\(.*\)/ifindex$;;'`
    echo $container:$veth
done

сценарий был написан, чтобы быть легко следовать.

образец run:

$ docker ps -q
c4d8096eff43
34ac6e9f1e6e
d5a2aa5f3de3

$ sudo ./vethfinder
c4d8096eff43:veth11d4238
34ac6e9f1e6e:veth7d52cd1
d5a2aa5f3de3:vethe46073d

ссылкой: https://forums.docker.com/t/relationship-between-interface-vethxxxxx-and-container/12872/20

8
отвечен NZD 2023-05-15 05:30

Я использую другой метод, который, кажется, работает просто отлично:

[root@kh1 ~]# docker inspect 6d48e279c5b8 --format '{{.State.Pid}}'                                                                                                                                                                                                              
56316
[root@kh1 ~]# 
[root@kh1 ~]# ip netns identify 56316
ns-56316
[root@kh1 ~]# 
[root@kh1 ~]# ip netns list | grep ns-56316
ns-56316 (id: 6)
[root@kh1 ~]# 
[root@kh1 ~]# ip link show | grep -B1 "link-netnsid 6"
330: veth1ce76e2b@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master cni0 state UP mode DEFAULT group default 
    link/ether de:f8:ce:a2:85:f9 brd ff:ff:ff:ff:ff:ff link-netnsid 6
1
отвечен mhristache 2023-05-15 07:47

ищет все интерфейсы в контейнерах.

#!/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$;;'`
        echo $container:$veth
    done
done
1
отвечен Alexey Gavrilov 2023-05-15 10:04

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх