ver saber para nombre etc espaƱol dominio como comando cambiar archivo linux docker linux-namespaces

linux - saber - El espacio de nombres de red de la ventana acoplable no es visible en la lista de redes IP



linux resolver nombre ip (3)

Como @jary indica, el comando ip netns solo funciona con enlaces simbólicos de espacio de nombres en /var/run/netns . Sin embargo, si tiene el comando nsenter disponible (parte del paquete util-linux ), puede lograr lo mismo utilizando el PID de su contenedor docker.

Para obtener el PID de un contenedor docker, puede ejecutar:

docker inspect --format ''{{.State.Pid}}'' <container_name_or_Id>

Para obtener un comando dentro del espacio de nombres de red de un contenedor:

nsenter -t <contanier_pid> -n <command>

P.ej:

$ docker inspect --format ''{{.State.Pid}}'' weechat 4432 $ sudo nsenter -t 4432 -n ip addr show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 75: eth0@if76: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:1b brd ff:ff:ff:ff:ff:ff inet 172.17.0.27/16 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::42:acff:fe11:1b/64 scope link valid_lft forever preferred_lft forever

Lo anterior fue equivalente a ejecutar ip netns exec <some_namespace> ip addr show .

Como puede ver aquí, deberá ejecutar nsenter con privilegios de root.

Cuando creo un nuevo contenedor docker como con

docker run -it -m 560m --cpuset-cpus=1,2 ubuntu sleep 120

y verifique sus espacios de nombres, puedo ver que se han creado nuevos espacios de nombres (ejemplo para pid 7047).

root@dude2:~# ls /proc/7047/ns -la total 0 dr-x--x--x 2 root root 0 Jul 7 12:17 . dr-xr-xr-x 9 root root 0 Jul 7 12:16 .. lrwxrwxrwx 1 root root 0 Jul 7 12:17 ipc -> ipc:[4026532465] lrwxrwxrwx 1 root root 0 Jul 7 12:17 mnt -> mnt:[4026532463] lrwxrwxrwx 1 root root 0 Jul 7 12:17 net -> net:[4026532299] lrwxrwxrwx 1 root root 0 Jul 7 12:17 pid -> pid:[4026532466] lrwxrwxrwx 1 root root 0 Jul 7 12:17 user -> user:[4026531837] lrwxrwxrwx 1 root root 0 Jul 7 12:17 uts -> uts:[4026532464] root@dude2:~# ls /proc/self/ns -la

Cuando ip netns list con ip netns list no puedo ver el nuevo espacio de nombres de red.

dude@dude2:~/docker/testroot$ ip netns list dude@dude2:~/docker/testroot$

¿Alguna idea de por qué?


Eso es porque la ventana acoplable no está creando el enlace simbólico requerido:

# (as root) pid=$(docker inspect -f ''{{.State.Pid}}'' ${container_id}) mkdir -p /var/run/netns/ ln -sfT /proc/$pid/ns/net /var/run/netns/$container_id

Luego, el espacio de nombres de netns del contenedor se puede examinar con ip netns ${container_id} , por ejemplo:

# e.g. show stats about eth0 inside the container ip netns exec "${container_id}" ip -s link show eth0


Similar pero diferente con la respuesta de @Jary.
No es necesario introducir /proc/<pid>/ o netster . Solo un movimiento abajo para lograr lo que quieres. Por lo tanto, podría operar el espacio de nombres de la red de contenedores al igual que se crean manualmente en la máquina host.

Un movimiento:

ln -s /var/run/docker/netns /var/run/netns

Resultado:

Iniciar un contenedor:

docker run -tid ubuntu:18.04

Lista de contenedores:

root@Light-G:/var/run# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 972909a27ea1 ubuntu:18.04 "/bin/bash" 19 seconds ago Up 18 seconds peaceful_easley

Lista de espacio de nombres de red de este contenedor:

root@Light-G:/var/run# ip netns list 733443afef58 (id: 0)

Eliminar contenedor:

root@Light-G:/var/run# docker rm -f 972909a27ea1 972909a27ea1

Listar el espacio de nombres de red de nuevo:

root@Light-G:/var/run# ip netns list root@Light-G:/var/run#