docker-compose 本身无直接 top 命令查看进程列表,但可用 docker-compose ps -q | xargs -r -i{} sh -c 'echo "--- {} ---"; docker top {}' 批量执行 docker top;而 docker-compose top 仅显示 cpu/内存等资源统计,非进程级信息。
docker-compose 本身没有直接的 top 子命令来批量查看所有服务容器的进程,但你可以用组合方式高效实现这个目标。核心思路是:先列出所有运行中的服务容器,再对每个容器分别执行 docker top。
用 docker-compose ps + docker top 批量查看
这是最常用、最轻量的方法,无需进入容器,也不依赖额外工具:
- 先获取当前项目中所有正在运行的容器名或 ID:
docker-compose ps -q(只输出容器 ID)或docker-compose ps --format "{{.Name}}" | grep "Up"(更清晰的服务名) - 对每个容器执行
docker top,例如查看前两个容器:for cid in $(docker-compose ps -q | head -2); do echo "=== $cid ==="; docker top "$cid" | head -5; done - 若想一次性显示全部(适合小规模项目):
docker-compose ps -q | xargs -r -I{} sh -c 'echo "\n--- {} ---"; docker top {}'
通过 docker-compose top 查看单个服务的进程(注意:不是原生命令)
⚠️ 注意:docker-compose top 是真实存在的命令,但它**不是 Docker CLI 的 docker top 的封装**,而是 Compose 自己实现的简易资源视图——它只显示 CPU/内存/IO 等统计值,不显示进程列表(如 PID、CMD 等)。它的输出类似 docker stats,不能替代进程级诊断。
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
- 用法:
docker-compose top [SERVICE...] - 示例:
docker-compose top web redis→ 显示 web 和 redis 服务容器的实时资源占用,但看不到 nginx worker 或 redis-server 进程本身
进阶:用 nsenter 无侵入监控多个容器进程
如果需要深度观察(比如查僵尸进程、父进程关系、完整参数),推荐结合 nsenter 方式,完全不改动容器状态:
- 为每个服务容器获取其宿主机 PID:
docker inspect $(docker-compose ps -q web) -f '{{.State.Pid}}' - 用 nsenter 列出该容器内所有进程:
nsenter -t $PID -p ps aux --sort=-pcpu - 可写成脚本循环处理多个服务,例如:
for svc in web api db; do pid=$(docker inspect $(docker-compose ps -q $svc) -f '{{.State.Pid}}'); echo "=== $svc (pid $pid) ==="; nsenter -t $pid -p ps -o pid,ppid,comm,args --sort=-pcpu | head -6; done
补充提醒
所有方法都要求容器处于 running 状态;已停止的容器无法使用 docker top 或 nsenter。另外,docker-compose ps 默认只显示当前目录下 docker-compose.yml 定义的服务,如需跨项目操作,请先 cd 到对应目录或用 -f 指定文件路径。










