无侵入提取容器内业务进程信息的核心是利用命名空间映射,通过 docker inspect 获取 PID,nsenter 进入 PID 命名空间执行 ps;结合 /proc/$PID/root 读取 cmdline、cwd、environ;用 docker inspect 检查 Privileged、PidMode、UsernsMode 确认隔离状态;最后用 watch 实现持续监控。
直接在宿主机上获取容器内业务进程信息,无需进容器、不装工具、不留痕迹——这是无侵入提取的核心目标。关键在于利用容器与宿主机之间的命名空间映射关系,绕过容器边界,从外部“透视”内部进程。
这是最轻量、最通用的方式。容器在宿主机上一定对应一个主进程(PID),通过它就能进入其 PID 命名空间,看到全部进程树:
docker inspect -f '{{.State.Pid}}' myapp
nsenter -t $PID -p ps auxf | grep -E "(java|node|python|dotnet)"
--sort=-%cpu 或 --sort=-%mem 可快速定位高负载业务进程每个容器的 /proc/$PID/root 是指向其根文件系统的符号链接。这意味着你可以直接从宿主机读取容器内进程打开的文件、环境变量甚至命令行参数:
cat /proc/$PID/root/proc/$(pgrep -f "my-service")/cmdline | tr '