docker inspect不提供进程性能树,仅输出静态配置和状态快照;需用nsenter + ps auxf、/proc/$PID/root访问或docker top -eo pid,ppid,%cpu,%mem,args结合脚本重建树状性能视图。
`docker inspect` 本身**不提供进程性能树**,它只输出容器的静态配置和当前状态快照(如创建时间、网络设置、挂载卷、资源限制、健康状态等),无法实时追踪进程行为或展示进程层级关系(即“性能树”)。想看到类似 `ps auxf` 那样的树状进程视图并附带 CPU/内存等实时指标,需结合其他机制。 下面分三类方式说明如何**在不侵入容器的前提下,实时获取容器内所有进程的性能树**:
用 nsenter + ps/top 构建实时进程树
这是最轻量、无侵入的核心方法。关键在于利用容器主进程的 PID 进入其 PID 命名空间:
获取容器 pid:
CONTAINER_PID=$(docker inspect -f '{{.State.Pid}}' myapp)
进入命名空间并显示带层级的进程树(含 CPU、内存):
nsenter -t $CONTAINER_PID -p ps auxf --sort=-%cpu
加 watch 实现每秒刷新:
watch -n 1 'nsenter -t $CONTAINER_PID -p ps auxf --sort=-%cpu'
该命令能清晰看到主进程、子进程、线程及其资源占用,天然形成“性能树”结构。
用 /proc/$PID/root + 宿主机工具深度分析
容器根文件系统可通过 /proc/$CONTAINER_PID/root 访问。例如查看某子进程的内存详情:
-
ls -l /proc/$CONTAINER_PID/root/proc/可列出容器内所有进程号目录 -
cat /proc/$CONTAINER_PID/root/proc/1/status | grep -E "VmRSS|Name"查看 PID 1 的实际内存占用 -
cat /proc/$CONTAINER_PID/root/proc/1/cmdline查看完整启动命令(含参数)
配合 pstree -p $CONTAINER_PID 可直接生成命名空间内的进程树图,再叠加 top -p 指定 PID 列表,即可实现“性能+拓扑”联动。
用 docker top + 自定义格式补全关键维度
docker top 是 Docker 原生命令,虽不显示树形结构,但可输出进程层级信息(若容器内进程自身支持):
docker top myapp -eo pid,ppid,comm,%cpu,%mem,args
其中 ppid(父进程 ID)可用于本地重建树状关系;comm 和 args 帮助识别进程角色;%cpu/%mem 提供性能维度。
配合简单脚本可自动整理成缩进树(例如用 awk 按 ppid 递归缩进),适合集成到监控流水线中。
不复杂但容易忽略:真正反映“生命周期中所有进程”的,不是某个瞬间的状态,而是持续观察其启停、派生、退出行为。这时应搭配 docker events --filter 'event=start' --filter 'event=die' 与上述进程树快照交叉比对,才能闭环追踪完整生命周期。











