如何在Docker容器内获取宿主机的进程信息与磁盘空间使用信息?
解决方案:通过挂载宿主机目录获取进程与磁盘信息
一、获取宿主机进程信息
你可以直接挂载宿主机的整个/proc目录到容器内的非默认路径(避免覆盖容器自身的/proc),再结合ps命令的参数或自行解析文件来获取进程数据:
- 启动容器时添加挂载参数:
-v /proc:/host/proc:ro(ro表示只读,降低误操作风险) - 在容器内执行进程查询命令:
ps auxf --root /host/proc,输出效果和宿主机上执行ps auxf完全一致 - 若你的监控工具是自研的,可直接读取
/host/proc下的进程文件(如每个进程目录中的status、cmdline),解析逻辑和在宿主机上读取/proc完全相同
二、获取宿主机磁盘使用率
磁盘使用率依赖读取宿主机各挂载点的文件系统状态,推荐两种可靠方式:
方式1:挂载宿主机根文件系统(只读)
如果需要监控所有磁盘分区的使用率,可将宿主机根目录挂载到容器内的只读路径:
- 启动容器时添加挂载参数:
-v /:/host/root:ro - 在容器内执行
df命令:df -P /host/root获取根分区使用率,或df -P /host/root/*遍历所有子挂载点 - 自研工具可通过
statfs系统调用访问/host/root对应文件系统,或读取/host/proc/mounts获取所有挂载点后,逐个访问/host/root/<挂载点>解析使用率
方式2:挂载特定分区与挂载点信息
若只需监控指定分区(如/data),可单独挂载目标分区与挂载点配置文件:
- 启动容器时添加:
-v /proc/mounts:/host/proc/mounts:ro -v /data:/host/data:ro - 通过
cat /host/proc/mounts获取全量挂载点信息,再针对/host/data执行df -P /host/data获取该分区使用率
注意事项
- 所有挂载建议添加
ro只读权限,避免容器操作意外修改宿主机文件系统 - 不要直接覆盖容器自身的
/proc或/目录,否则会导致容器内系统命令失效 - 部分Linux发行版需调整SELinux/AppArmor策略,确保容器有权限读取宿主机挂载目录
内容的提问来源于stack exchange,提问作者Catscarlet
相关产品推荐
相关产品推荐

