Поиск процессов контейнера Docker? (с точки зрения хоста)
Я делаю некоторые тесты на докере и контейнерах, и мне было интересно:
Есть ли способ, с помощью которого я могу найти весь процесс, связанный с док-контейнером, по его имени или идентификатору с точки зрения хоста.
В конце концов, контейнер - это набор виртуализированных процессов.
Ответы
Ответ 1
Вы можете использовать команду docker top
.
Эта команда перечисляет все процессы, запущенные в вашем контейнере.
Например, эта команда в одном контейнере процесса на моем ящике отображает:
UID PID PPID C STIME TTY TIME CMD
root 14097 13930 0 23:17 pts/6 00:00:00 /bin/bash
Также можно использовать все методы, упомянутые другими, но это должно быть проще всего.
Обновление
Чтобы просто получить основной идентификатор процесса в контейнере, используйте следующую команду:
docker inspect -f '{{.State.Pid}}' <container id>
Ответ 2
Еще один способ получить общий обзор всех процессов Docker, выполняющихся на узле, - это использовать общие средства systemd для cgroup.
systemd-cgls
отобразит все наши группы и процессы, запущенные в них в древовидном виде, например:
├─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
├─docker
│ ├─070a034d27ed7a0ac0d336d72cc14671584cc05a4b6802b4c06d4051ce3213bd
│ │ └─14043 bash
│ ├─dd952fc28077af16a2a0a6a3231560f76f363359f061c797b5299ad8e2614245
│ │ └─3050 go-cron -s 0 0 * * * * -- automysqlbackup
Так как каждый контейнер Docker имеет свою собственную группу, вы также можете увидеть Docker Containers и соответствующие им хост-процессы.
Два интересных свойства этого метода:
- Он работает, даже если Docker Daemon (s) не функционирует.
- Это довольно быстрый обзор.
Вы также можете использовать systemd-cgtop
, чтобы получить обзор использования ресурсов Docker Containers, аналогичный top
.
Кстати: поскольку службы systemd также соответствуют группам, эти методы также применимы к службам, не находящимся в докерезе.
Ответ 3
процесс, запущенный в контейнере Docker, является дочерним по отношению к процессу с именем containerd-shim
shim (в Docker v18.09.4)
- Сначала выясните идентификаторы процессов в
containerd-shim
. - Для каждого из них найдите свой дочерний процесс.
pgrep containerd-shim
7105
7141
7248
Чтобы найти дочерний процесс родительского процесса 7105:
pgrep -P 7105
7127
В конце концов вы можете получить список с:
for i in $(pgrep containerd-shim); do pgrep -P $i; done
7127
7166
7275
Ответ 4
docker ps
отобразит запущенные контейнеры докеров.
docker exec <id|name> ps
расскажет вам о запущенных процессах.
Ответ 5
Докер-статистика "id контейнера"
Показывает потребление ресурсов вместе с pid или просто Docker ps.
Возможно, этот чит-лист может быть полезен.
http://theearlybirdtechnology.com/2017/08/12/docker-cheatsheet/
Ответ 6
При запуске этого на хосте он выдаст вам список процессов, запущенных в контейнере с <Container ID>
, показывая PID хоста вместо PID контейнера.
DID=$(docker inspect -f '{{.State.Pid}}' <Container ID>);ps --ppid $DID -o pid,ppid,cmd