首页/云/Docker 容器速查/docker top 查看容器内进程
基础命令50 条

docker top 查看容器内进程

从宿主视角列出容器内的进程及其宿主 PID,用于确认主进程、排查多进程与 PID 映射关系。

Docker 容器速查云更新于 2026-10-13

docker top 是什么

docker top 从宿主机视角列出容器里的进程,给出的 PID 是宿主命名空间下的进程号,可以和宿主的 ps、top 输出直接对齐。它由守护进程在宿主侧取进程信息,因此不依赖镜像里装没装 ps,极简镜像(scratch、distroless)也能用。

基本信息

用途列出容器内进程,看宿主 PID 视角
语法docker top CONTAINER [宿主 ps 参数]
底层守护进程在宿主侧读取进程信息,镜像里没有 ps 也能用
对照命令docker inspect -f '{{.State.Pid}}' 取主进程的宿主 PID
常用参数-o pid,ppid,stat,cmd 指定列,或直接跟 aux

典型使用场景

  • 确认容器真正在跑什么进程:镜像 ENTRYPOINT 被编排参数覆盖后,实际命令与文档不一致
  • 排查多进程容器的僵尸子进程:STAT 列出现 Z 说明父进程没回收
  • 对齐宿主监控数据:拿到宿主 PID 后去 top、pidstat 里看它占了多少资源
  • 容器占满 CPU 或内存时先定位到具体进程,再决定进容器调试还是直接重启
  • 确认 --init 是否生效:主进程应当变成 docker-init,而不是应用本身

示例

示例
docker top web                            # 默认列出 pid、用户、启动时间、命令
docker top web -o pid,ppid,stat,cmd       # 指定列,看清父子关系
docker top web aux                         # 按整机格式列出,含 CPU 与内存列
docker inspect -f 'PID={{.State.Pid}}' web # 主进程在宿主上的 PID

输出列怎么读

列含义注意点
PID宿主命名空间下的进程号与容器内 ps 看到的编号不同
PPID父进程的宿主 PID容器主进程的父进程通常是宿主上的 shim
STAT进程状态出现 Z 是僵尸进程,根因在父进程未回收
COMMAND完整命令行可能带 entrypoint 包装,与镜像的 Cmd 字段不一致
TIME/STIME累计 CPU 时间与启动时刻对照重启时间判断是不是刚被拉起
容器里没有 ps 也能用 docker top,它在宿主侧取进程信息;反过来,在容器里要自己看进程就得先装 procps 之类的工具。
跟在容器名后面的参数会透传给宿主的 ps。procps 版本不同,支持的选项也不同,复杂排序统计建议拿到宿主终端里做。

易错点

  • docker top 给出的 PID 是宿主 PID,直接照这个号去容器里 kill 会杀错进程,容器内定位要在容器内重新看
  • 加了 --init 的容器主进程显示为 docker-init,应用是它的子进程,按 PID 1 判断应用名会误判
  • COMMAND 截断成 /bin/sh 或 /bin/sh -c 时说明真实命令藏在脚本里,只看这一列下结论容易跑偏
  • Z 状态进程只能发现不能靠 docker top 清理,要回到应用侧修父进程的回收逻辑

数据来源与参考

  • Docker 官方 CLI 参考:docker top(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌