Descobrir a interface veth # de um contêiner docker

8

Tenho centenas de contêineres em vários comutadores virtuais de software. Eu gostaria de saber se é possível descobrir qual vnet # pertence a qual contêiner docker. No momento, estou detectando isso observando o syslog à medida que cada contêiner é criado. No KVM, existe um comando "virsh domiflist", que é exatamente o que estou procurando.

    
por user2066671 28.02.2017 / 00:23

3 respostas

8

O iflink do contêiner é o mesmo que o ifindex do veth# .

Você pode obter o iflink do contêiner da seguinte forma:

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

Diga, isso resulta em 12 e, em seguida, em grep :

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

Isso dará um resultado único no meu sistema:

/sys/class/net/veth11d4238/ifindex

Combine isso em um script:

#!/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

O script foi escrito para ser fácil de seguir.

Execução da amostra:

$ docker ps -q
c4d8096eff43
34ac6e9f1e6e
d5a2aa5f3de3

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

Referência: link

    
por 28.02.2017 / 08:03
1

Estou usando um método diferente, que parece funcionar bem:

[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
    
por 19.04.2018 / 11:07
1

procura por todas as interfaces em contêineres.

#!/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
    
por 21.05.2018 / 12:20

Tags