Finding Docker container processes? (from host poi

2019-01-21 19:34发布

问题:

I am doing some tests on docker and containers and I was wondering:

Is there a method I can use to find all process associated with a docker container by its name or ID from the host point of view.

After all, at the end of the day a container is set of virtualized processes.

回答1:

You can use docker top command. This command lists all processes running within your container.

For instance this command on a single process container on my box displays:

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

All methods mentioned by others are also possible to use but this one should be easiest.

Update:

To simply get the main process id within the container use this command:

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


回答2:

  • First figure out the process ID of the docker daemon process.
  • Then filter the process list by keeping only processes that parent process ID is the one of the docker daemon.
  • Finally filter out docker engine internal processes such as 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


回答3:

Another way to get an overview of all Docker processes running on a host is using generic cgroup based systemd tools.

systemd-cgls will show all our cgroups and the processes running in them in a tree-view, like this:

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

As every Docker container has its own cgroup, you can also see Docker Containers and their corresponding host processes this way.

Two interesting properties of this method:

  1. It works even if the Docker Daemon(s) are defunct.
  2. It's a pretty quick overview.

You can also use systemd-cgtop to get an overview of the resource usage of Docker Containers, similar to top.

By the way: Since systemd services also correspond to cgroups these methods are also applicable to non-Dockerized systemd services.



回答4:

docker ps will list docker containers that are running.

docker exec <id|name> ps will tell you the processes it's running.



回答5:

Docker stats "container id" Shows the resource consumption along with pid or simply Docker ps .

Probably this cheat sheet can be of use. http://theearlybirdtechnology.com/2017/08/12/docker-cheatsheet/