把一段 Python 磁盘巡检脚本放进 Docker

举报
yd_241623038 发表于 2026/10/23 21:58:58 2026/10/23
【摘要】 记录如何用 Python 标准库检查磁盘使用率,并把脚本放进 python:3.11-slim 容器:固定时区、只读挂载,避免使用 latest 标签。这是一篇个人实操笔记。

上周给一台测试机做例行巡检时,我写了一段很短的 Python 脚本,用来看根分区剩余空间,并在低于阈值时打印告警。脚本本身不到四十行,但同事的环境有的是 Python 3.9,有的是 3.11,还有人把脚本直接丢到没有 pip 的精简系统里。与其互相对齐解释器版本,不如把它装进一个固定的容器里跑。这篇笔记只记录我自己这次的做法,不涉及生产集群编排。

脚本做三件事。第一,用 shutil.disk_usage 读取指定挂载点的总容量、已用和剩余字节,换算成 GiB 后保留一位小数。第二,把使用率超过百分之八十的挂载点打上 WARN,其余打上 OK。第三,把结果按固定列宽打印,方便直接贴到巡检记录里。我把阈值和挂载点列表放在脚本顶部的常量里,避免每次改逻辑。示例只检查根分区和数据盘目录;如果路径不存在就跳过并注明 missing,不让整个脚本以非零状态退出。

目录很简单:巡检脚本、一份写明无第三方依赖的依赖说明、容器构建文件,以及几行运行说明。基础镜像选择官方 Python 3.11 精简版,不使用 latest 标签。构建阶段不需要编译器,所以没有再套多阶段构建。构建文件里先设置工作目录为 opt 下的 diskcheck,再复制脚本,最后用 ENTRYPOINT 固定入口,这样运行时只追加参数即可。我在笔记里记下构建当天拉取到的镜像摘要,方便以后对照。

本地验证分两步。先在宿主机直接运行脚本并传入根路径,看输出是否符合预期,再构建一个带当天日期标签的本地镜像。构建完成后用一次性容器再跑一遍。容器里的根分区是容器自己的可写层,数值会和宿主机不同,这是预期行为。如果要看宿主机真实磁盘,需要把对应目录以只读方式挂载进去。只读是为了避免巡检容器误写数据。

我还遇到两个小坑。精简镜像默认时区是 UTC,打印时间会比北京时间早八小时,所以在构建文件里把时区设为上海,并安装时区数据包。另一个是 Windows 换行符:从编辑器拷到 Linux 后脚本报解释器错误,转成 Unix 换行就好。脚本内部还会判断路径是不是挂载点,避免把一个普通目录误当成挂载点。

这次整理让我更明确地区分“在我电脑上能跑”和“别人拉下来就能跑”。容器没有让脚本变得更聪明,只是把解释器、时区和入口命令锁死了。后续如果要加日志上报,我会再单独引入依赖并固定版本号,而不是安装时不写版本。以上内容均为个人实验记录,命令仅在测试机上使用。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。