You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python的psutil库获取宿主机而非容器的系统信息?

要让容器内的psutil获取宿主机的系统信息(进程、CPU/内存使用率),核心是打破容器的隔离限制,让容器能访问宿主机的系统文件与PID命名空间,具体修改方案如下:

1. 修改容器启动参数

启动容器时必须添加以下参数,实现宿主机资源的共享与挂载:

docker run --pid=host -v /proc:/host/proc:ro -v /sys:/host/sys:ro [你的镜像名称]
  • --pid=host:让容器使用宿主机的PID命名空间,确保psutil能识别宿主机的所有进程ID
  • -v /proc:/host/proc:ro:只读挂载宿主机的/proc文件系统(存储进程与系统状态数据)到容器内部
  • -v /sys:/host/sys:ro:只读挂载宿主机的/sys文件系统(存储硬件与内核配置信息)

2. 修改monitor.py,指定psutil读取宿主机路径

在monitor.py开头添加代码,让psutil从挂载的宿主机路径读取数据,而非容器自身的隔离路径:

import os
# 指向宿主机的proc和sys挂载目录
psutil.PROCFS_PATH = '/host/proc'
psutil.SYSFS_PATH = '/host/sys'

3. 代码与Dockerfile优化建议

  • Dockerfile简化:将所有依赖统一写入requirements.txt,避免重复安装操作。例如requirements.txt内容:
    pika
    apscheduler
    prettytable
    psutil
    flask
    
    对应Dockerfile安装步骤改为:
    RUN pip3 install --no-cache-dir -r requirements.txt
    
  • app.py修复:移除重复的from flask import Flask导入,修正后开头代码:
    #!/usr/bin/python3
    """ Demonstrating Flask, using APScheduler. """
    from flask import Flask
    import pika
    import monitor
    from apscheduler.schedulers.background import BackgroundScheduler
    
  • 进程采集逻辑优化:替换原有的PID截取方式,用更可靠的process_iter遍历进程,同时只保留Top10高CPU进程:
    def getRunningProcesses():
        proc = []
        # 遍历所有进程,初始化CPU百分比统计
        for p in psutil.process_iter(['pid']):
            try:
                p.cpu_percent()
                proc.append(p)
            except (psutil.NoSuchProcess, psutil.AccessDenied):
                pass
        
        time.sleep(0.1)
        # 计算CPU使用率并按降序排序,取Top10
        top_list = sorted(
            [(p, p.cpu_percent() / psutil.cpu_count()) for p in proc],
            key=lambda x: x[1],
            reverse=True
        )[:10]
        top10_str = str(top_list)
        print(top10_str)
        try:
            add(top10_str)
        except Exception:
            pass
        return top10_str
    

安全注意事项

挂载/proc和/sys时务必使用ro(只读)权限,防止容器意外修改宿主机系统文件,降低安全风险。

内容的提问来源于stack exchange,提问作者Kyle Ress-Liere

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 04:55:17