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.
Docker stats "container id" Muestra el consumo de recursos junto con pid o simplemente Docker ps.
Probablemente esta hoja de trucos puede ser de utilidad. http://theearlybirdtechnology.com/2017/08/12/docker-cheatsheet/
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:
- Funciona incluso si los Demonios de Docker están apagados.
- 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