GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cuál es el PID en el host de un proceso que se ejecuta dentro de un contenedor Docker?

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

Linux
  1. Reenviar el puerto del host al contenedor docker

  2. ¿Cómo determinar si un proceso se ejecuta dentro de lxc/Docker?

  3. Inicio de un shell en el contenedor Docker Alpine

  4. Hacer un montaje NFS en el host visible y de lectura y escritura dentro del contenedor Docker

  5. Determinar el procesador particular en el que se ejecuta un proceso

Vista previa de la tecnología:ejecución de un contenedor dentro de un contenedor

Construcción de contenedores a mano:el espacio de nombres PID

¿Cómo encontrar el ID de proceso (pid) de un programa de terminal en ejecución?

Cómo obtener la dirección IP de un contenedor Docker desde el host

Cómo verificar si el demonio Docker o un contenedor se está ejecutando

SIGTERM vs SIGKILL:¿Cuál es la diferencia?