Descubrir la interfaz veth # de un contenedor acoplable
11
Tengo cientos de contenedores en varios conmutadores virtuales de software. Me gustaría saber si es posible averiguar qué vnet # pertenece a qué contenedor de docker. En este momento, lo estoy detectando viendo syslog a medida que se crea cada contenedor. En KVM, hay un comando "virsh domiflist", que es exactamente lo que estoy buscando.
Gracias, pero por alguna razón no siempre funciona. Tengo 50 contenedores, y el script anterior devolvería 1 o 2 espacios en blanco. Cuando miro el valor de iflink para ambos contenedores, no son +1 del valor obtenido desde el interior del contenedor.
user2066671
Esto es una suposición: podría ser un problema de tiempo. Si los contenedores se crean demasiado rápido uno después del otro, la asignación de los iflinkvalores podría no estar sincronizada. El sistema puede asignar dos iflinkvalores consecutivos a dos contenedores, en lugar de alternar entre el contenedor y el sistema.
NZD
Esto es interesante, creo y ejecuto los contenedores en un bucle for, el último contenedor iflink siempre es muy diferente. Por ejemplo, el enlace if / sys / class / net / veth ### / iflink devuelve 4205, pero el contenedor / sys / class / eth0 / iflink muestra 4216
user2066671
Me gana Intenté algunas cosas: comenzar un montón de contenedores, verifiqué que se iflinkalinea bien. Detuve algunos contenedores y creé algunos nuevos, verifiqué que iflinktodavía se alinea bien. Tengo 115 contenedores funcionando y el más alto iflinkfue 244. ¿Cómo llegas al 4216?
NZD
También revisé la publicación de donde obtuve la información. Dice: "Esto se puede encontrar haciendo coincidir el iflinkvalor de la interfaz de un contenedor con el valor vethde índice de la interfaz del host". Mi script usa iflinkpara ambos. Tal vez intente 'ifindex' para 'veth'?
NZD
3
busca todas las interfaces en contenedores.
#!/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
valores podría no estar sincronizada. El sistema puede asignar dosiflink
valores consecutivos a dos contenedores, en lugar de alternar entre el contenedor y el sistema.iflink
alinea bien. Detuve algunos contenedores y creé algunos nuevos, verifiqué queiflink
todavía se alinea bien. Tengo 115 contenedores funcionando y el más altoiflink
fue 244. ¿Cómo llegas al 4216?iflink
valor de la interfaz de un contenedor con el valorveth
de índice de la interfaz del host". Mi script usaiflink
para ambos. Tal vez intente 'ifindex' para 'veth'?busca todas las interfaces en contenedores.
fuente
Estoy usando un método diferente, que parece funcionar bien:
fuente