Pregunta ¿Encontrando los procesos del contenedor Docker? (desde el punto de vista del host)


Estoy haciendo algunas pruebas en docker y contenedores y me preguntaba:

¿Hay algún método que pueda usar para encontrar todo el proceso asociado con un contenedor de docker por su nombre o ID? desde el punto de vista del anfitrión.

Después de todo, al final del día se configura un contenedor de procesos virtualizados.


14
2018-01-19 14:02


origen


Respuestas:


Puedes usar docker top mando. Este comando enumera todos los procesos que se ejecutan dentro de su contenedor.

Por ejemplo, este comando en un contenedor de proceso único en mi cuadro muestra:

UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                14097               13930               0                   23:17               pts/6               00:00:00            /bin/bash

Todos los métodos mencionados por otros también son posibles de usar, pero este debería ser el más fácil.

Actualizar:

Para obtener simplemente el ID del proceso principal dentro del contenedor, use este comando:

 docker inspect -f '{{.State.Pid}}' <container id>

22
2018-01-19 15:19



  • Primero averigüe la ID del proceso del proceso del daemon de Docker.
  • A continuación, filtre la lista de procesos manteniendo solo los procesos que el ID de proceso principal es el del daemon docker.
  • Finalmente, filtra los procesos internos del motor acoplador, como docker-proxy.

# PID of the docker daemon
ps aux | grep -E 'docker (-d|daemon)'
root       665  0.0  0.4 1521560 17156 ?       Ssl  janv.06   5:47 /usr/bin/docker -d -H fd://
# find child processes of the docker daemon
pgrep -P 665

4076

4135

4210

4226

4784

4788

# figure out details of a process
ps 4076
 PID TTY      STAT   TIME COMMAND
 4076 ?        Ssl   10:45 /usr/bin/redis-server 0.0.0.0:6379
# repeat for other child processes

8
2018-01-19 14:44



Otra forma de obtener una visión general de todos los procesos de Docker que se ejecutan en un host es usar herramientas genéricas basadas en cgroup.

systemd-cgls mostrará todos nuestros cgroups y los procesos que se ejecutan en ellos en una vista en árbol, como este:

├─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
├─docker
│ ├─070a034d27ed7a0ac0d336d72cc14671584cc05a4b6802b4c06d4051ce3213bd
│ │ └─14043 bash
│ ├─dd952fc28077af16a2a0a6a3231560f76f363359f061c797b5299ad8e2614245
│ │ └─3050 go-cron -s 0 0 * * * * -- automysqlbackup

Como cada contenedor Docker tiene su propio cgroup, también puede ver Docker Containers y sus correspondientes procesos host de esta manera.

Dos propiedades interesantes de este método:

  1. Funciona incluso si los Daemon Docker están extintos.
  2. Es una descripción bastante rápida.

También puedes usar systemd-cgtop obtener una visión general del uso de los recursos de los Contenedores Docker, similar a top.

Por cierto: dado que los servicios systemd también corresponden a cgroups, estos métodos también son aplicables a los servicios systemd no Dockerized.


4
2018-02-22 08:05



docker ps mostrará una lista de los contenedores acoplables que se están ejecutando.

docker exec <id|name> ps le dirá los procesos que está ejecutando.


2
2018-01-19 14:04



Docker stats "identificación del contenedor" Muestra el consumo de recursos junto con pid o simplemente Docker ps.

Probablemente esta hoja de trucos pueda ser de utilidad. http://theearlybirdtechnology.com/2017/08/12/docker-cheatsheet/


0
2017-08-22 20:42