Si conoce el pid del host o el pid del contenedor, puede encontrarlo buscando en todos los mapas de NSpid en el host de la siguiente manera:
# grep NSpid.*10061 /proc/*/status 2> /dev/null
/proc/1194200/status:NSpid: 1194200 10061
- 1194200 es el id del host
- 10061 es el id del contenedor
El 2>/dev/null es ignorar los procesos de corta duración que causan errores grep como este:grep:/proc/1588467/status:No such file or directory
Puedes mirar el /proc/<pid>/status
para determinar la asignación entre el PID del espacio de nombres y el PID global. Por ejemplo, si en un contenedor docker inicio varios sleep 900
procesos, como este:
# docker run --rm -it alpine sh
/ # sleep 900 &
/ # sleep 900 &
/ # sleep 900 &
Puedo verlos ejecutándose en el contenedor:
/ # ps -fe
PID USER TIME COMMAND
1 root 0:00 sh
7 root 0:00 sleep 900
8 root 0:00 sleep 900
9 root 0:00 sleep 900
10 root 0:00 ps -fe
Puedo mirar estos en el host:
# ps -fe | grep sleep
root 10394 10366 0 09:11 pts/10 00:00:00 sleep 900
root 10397 10366 0 09:12 pts/10 00:00:00 sleep 900
root 10398 10366 0 09:12 pts/10 00:00:00 sleep 900
Y para cualquiera de esos, puedo mirar el status
archivo para ver el espacio de nombres pid:
# grep -i pid /proc/10394/status
Pid: 10394
PPid: 10366
TracerPid: 0
NSpid: 10394 7
Mirando el NSpid
línea, puedo ver que dentro del espacio de nombres PID este proceso tiene pid 7. Y, de hecho, si elimino el proceso 10394
en el anfitrión:
# kill 10394
Luego, en el contenedor, veo que PID 7 ya no se está ejecutando:
/ # ps -fe
PID USER TIME COMMAND
1 root 0:00 sh
8 root 0:00 sleep 900
9 root 0:00 sleep 900
11 root 0:00 ps -fe