tutorial subir que imagen hub español ejemplos desde crear contenedor cero linux docker process-migration

linux - subir - que es docker



¿Encontrar procesos de contenedor Docker?(desde el punto de vista del host) (5)

Estoy haciendo algunas pruebas en la ventana y los contenedores y me preguntaba:

¿Existe algún método que pueda usar para encontrar todos los procesos asociados con un contenedor de ventana acoplable por su nombre o ID desde el punto de vista del host?

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



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

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

├─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 de Docker tiene su propio cgroup, también puede ver los contenedores de Docker y sus procesos de host correspondientes de esta manera.

Dos propiedades interesantes de este método:

  1. Funciona incluso si los Demonios de Docker están apagados.
  2. Es una visión general bastante rápida.

También puede usar systemd-cgtop para obtener una visión general del uso de recursos de Docker Containers, similar a top .

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


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

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


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

Por ejemplo, este comando en un solo contenedor de proceso en mi caja 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.

Actualización :

Para obtener simplemente la identificación del proceso principal dentro del contenedor, use este comando:

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


  • Primero, averigüe el ID de proceso del proceso del demonio docker.
  • Luego, filtre la lista de procesos manteniendo solo los procesos en los que el ID del proceso principal es el del daemon docker.
  • Finalmente, filtre los procesos internos del motor de la ventana acoplable, como la 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