Wal*_*raf 36 linux process-migration docker
我正在对码头和容器进行一些测试,我想知道:
有没有一种方法可以用来从主机的角度通过名称或ID查找与docker容器关联的所有进程.
毕竟,在一天结束时,容器是一组虚拟化进程.
Boy*_*nux 43
你可以使用docker top命令.此命令列出容器中运行的所有进程.
例如,我的框上的单个进程容器上的此命令显示:
UID PID PPID C STIME TTY TIME CMD
root 14097 13930 0 23:17 pts/6 00:00:00 /bin/bash
Run Code Online (Sandbox Code Playgroud)
其他人提到的所有方法也可以使用,但这个方法应该是最简单的.
更新:
要简单地获取容器中的主进程ID,请使用以下命令:
docker inspect -f '{{.State.Pid}}' <container id>
Run Code Online (Sandbox Code Playgroud)
Joh*_*hrs 16
另一种了解主机上运行的所有Docker进程的方法是使用基于cgroup的通用systemd工具.
systemd-cgls 将在树视图中显示我们所有的cgroup及其中运行的进程,如下所示:
??1 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
??docker
? ??070a034d27ed7a0ac0d336d72cc14671584cc05a4b6802b4c06d4051ce3213bd
? ? ??14043 bash
? ??dd952fc28077af16a2a0a6a3231560f76f363359f061c797b5299ad8e2614245
? ? ??3050 go-cron -s 0 0 * * * * -- automysqlbackup
Run Code Online (Sandbox Code Playgroud)
由于每个Docker容器都有自己的cgroup,因此您也可以通过这种方式查看Docker容器及其相应的主机进程.
这种方法的两个有趣的属性:
您还可以使用它systemd-cgtop来概述Docker容器的资源使用情况,类似于top.
顺便说一下:由于systemd服务也对应于cgroups,因此这些方法也适用于非Dockerized系统服务.
Tho*_*eil 12
containerd-shim.pgrep containerd-shim
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)7105 7141 7248
pgrep -P 7105
Run Code Online (Sandbox Code Playgroud)
4076
4135
4210
4226
4784
4788
for i in $(pgrep containerd-shim); do pgrep -P $i; done
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)7127 7166 7275
pgrep containerd-shim
Run Code Online (Sandbox Code Playgroud)
小智 7
我在一行中使用 bash 脚本找到了一个类似的解决方案:
for i in $(docker container ls --format "{{.ID}}"); do docker inspect -f '{{.State.Pid}} {{.Name}}' $i; done
Run Code Online (Sandbox Code Playgroud)
在主机上运行它时,它会给你一个在容器中运行的进程列表<Container ID>,显示主机 PID 而不是容器 PID。
DID=$(docker inspect -f '{{.State.Pid}}' <Container ID>);ps --ppid $DID -o pid,ppid,cmd
Run Code Online (Sandbox Code Playgroud)
docker ps将列出正在运行的 docker 容器。
docker exec <id|name> ps会告诉你它正在运行的进程。
| 归档时间: |
|
| 查看次数: |
45387 次 |
| 最近记录: |