news 2026/4/28 23:34:23

使用 Python 脚本自动化管理 Docker 容器:启动、修改密码、删除及系统资源监控

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用 Python 脚本自动化管理 Docker 容器:启动、修改密码、删除及系统资源监控

在日常开发和运维中,我们经常需要对 Docker 容器进行批量操作,比如启动容器、重置 root 密码、删除无用容器等。手动执行命令效率低且容易出错。本文将通过 Python 脚本实现以下功能:

  1. 启动指定名称的容器
  2. 修改容器内 root 用户密码
  3. 安全删除容器(先 stop 再 rm)
  4. 获取当前主机的 CPU、内存、磁盘使用情况

所有操作均基于subprocesspsutil库,适用于 Linux 环境(如 CentOS、Ubuntu)。


前提条件

  • 已安装 Docker 并运行
  • Python 3.6+
  • 安装依赖库:
    pipinstallpsutil

一、启动 Docker 容器

fromsubprocessimportPopen,PIPE name="centos7-novnc3d"p=Popen(['docker','start',name],stderr=PIPE)_,stderr=p.communicate()code=stderr.decode("utf-8").strip()ifcode==""orcode.startswith(name):response={"code":200,'msg':"success"}else:response={"code":500,'msg':code}print(response)

✅ 说明:

  • docker start成功时通常无输出(stderr 为空)
  • 若容器不存在或已运行,可能返回错误信息,需根据实际 stderr 判断

二、修改容器内 root 密码

fromsubprocessimportPopen,PIPE root_passwd="1234567"name="centos7-novnc28"# 构造修改密码的 shell 命令pass_cmd=f"echo 'root:{root_passwd}' | chpasswd && echo 'success'"p2=Popen(['docker','exec','-i',name,'/bin/bash','-c',pass_cmd],stdout=PIPE,stderr=PIPE)stdout,stderr2=p2.communicate()# 注意:chpasswd 成功时通常无 stderr,成功标志由 stdout 中的 'success' 判断output=stdout.decode("utf-8").strip()error=stderr2.decode("utf-8").strip()if"success"inoutputor(output==""anderror==""):response={"code":200,'msg':"root修改密码成功"}else:response={"code":500,'msg':errororoutput}print(response)

⚠️ 注意:

  • 原始代码中误将stderr当作成功标志,实际上chpasswd成功时不会输出到 stderr
  • 更可靠的方式是检查stdout是否包含"success",或两者均为空

三、安全删除容器(先 stop 再 rm)

fromsubprocessimportPopen,PIPE name="reverent_matsumoto"try:# 停止容器p_stop=Popen(['docker','stop',name],stdout=PIPE,stderr=PIPE)stdout,stderr=p_stop.communicate()stop_output=stdout.decode("utf-8").strip()ifstop_output==name:# docker stop 成功会返回容器名# 删除容器p_rm=Popen(['docker','rm',name],stdout=PIPE,stderr=PIPE)rm_out,rm_err=p_rm.communicate()response={"code":200,'msg':"删除成功"}else:response={"code":500,'msg':stderr.decode("utf-8")}exceptFileNotFoundError:response={"code":500,'msg':"docker未安装"}print(response)

✅ 提示:

  • docker stop成功时会输出容器 ID 或名称(取决于输入)
  • 必须先 stop 再 rm,否则docker rm会失败(除非加-f

四、获取系统资源使用情况(CPU、内存、磁盘)

importpsutilimportosdefbytes2human(n):"""将字节转换为易读格式"""symbols=('KB','MB','GB','TB')fori,sinenumerate(symbols):unit=1<<(i+1)*10# 1KB=1024, 1MB=1024^2...ifn<unit:returnf"{n/(unit//1024):.2f}{s}"returnf"{n:.2f}B"# 内存信息mem_info=psutil.virtual_memory()disk_usage=psutil.disk_usage('/')response={"code":200,"msg":"success","data":{"memory":{"current_process_memory":bytes2human(psutil.Process(os.getpid()).memory_info().rss),"total":bytes2human(mem_info.total),"used":bytes2human(mem_info.used),"available":bytes2human(mem_info.available),"free":bytes2human(mem_info.free),"active":bytes2human(mem_info.active),"inactive":bytes2human(mem_info.inactive),"percent":f"{mem_info.percent}%","cpu_cores":psutil.cpu_count()},"disk_usage":{"total":bytes2human(disk_usage.total),"used":bytes2human(disk_usage.used),"free":bytes2human(disk_usage.free),"percent":f"{disk_usage.percent}%"}}}print(response)

📊 输出示例(简化):

{"code":200,"msg":"success","data":{"memory":{"total":"15.50 GB","percent":"45.2%",...},"disk_usage":{"total":"931.51 GB","percent":"32.1%",...}}}

总结

通过以上脚本,我们可以:

  • 自动化管理 Docker 容器生命周期
  • 动态修改容器内部用户密码(适用于初始化配置)
  • 实时监控服务器资源,便于集成到运维平台

💡建议:在生产环境中,应增加日志记录、异常重试、权限校验等机制,提升脚本健壮性。


参考资料

  • Docker CLI 文档
  • psutil 官方文档

如果你觉得这篇文章对你有帮助,欢迎点赞、收藏、关注!也欢迎在评论区交流你的自动化运维经验 😊


✍️ 本文代码已在 CentOS 7 + Docker 20.10 + Python 3.9 环境下测试通过。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/26 0:17:34

TikTok矩阵工具实操指南:分主体适配与落地流程拆解

图片来源&#xff1a;TK云大师摘要&#xff1a;TikTok矩阵运营的核心竞争力&#xff0c;在于工具与业务需求的精准适配。对于号商、品牌方、跨境电商而言&#xff0c;工具选型失误会直接导致运营效率低下、账号风险攀升。本文聚焦三类主体的核心需求&#xff0c;拆解可直接复用…

作者头像 李华
网站建设 2026/4/26 15:42:33

编程语言扩展的实现机制

编程语言扩展的实现机制 编程语言的扩展机制允许在核心语言基础上增加新功能或优化性能。下面我将深入阐述几种主要的扩展实现方式&#xff0c;并结合具体实例说明。 一、扩展实现的主要方式 1. C/C扩展&#xff08;原生扩展&#xff09; 通过语言的原生接口将底层代码与高…

作者头像 李华
网站建设 2026/4/17 19:34:55

Vue3+Cesium教程(38)--动态雾浓度、颜色

本学习系列以Cesium Vue3 Typescriptelementplus作为主要技术栈&#xff0c;后续会循序渐进&#xff0c;持续探索Cesium的高级功能&#xff0c;敬请期待。欢迎关注威信公众号“webgis学习”。详情请查阅原文 Vue3Cesium教程(38)--动态雾浓度、颜色https://mp.weixin.qq.com/s…

作者头像 李华
网站建设 2026/4/22 4:05:30

算法题:字符串转换成整数。

字符串转换成整数:从原理到实战的深度解析 关键词 字符串转换、整数转换、类型转换、算法设计、边界处理、异常处理、Python实现 摘要 本文将深入探讨"字符串转换成整数"这一经典算法问题,从问题背景、核心概念、算法原理到实际应用进行全方位解析。我们将详细…

作者头像 李华
网站建设 2026/4/25 15:40:13

勾股定理简单学习

前言 若a和b是直角三角形的两条直角边&#xff0c;c是斜边&#xff0c;那么 a2b2c2a^{2}b^{2}c^{2}a2b2c2 勾股定理的图解法证明 勾股定理指出&#xff0c;在直角三角形中&#xff0c;斜边的平方等于两直角边的平方和&#xff0c;即 ( a2b2c2a^2 b^2 c^2a2b2c2)。以下是几种经…

作者头像 李华
网站建设 2026/4/26 5:23:57

从零开始安装并配置开源AI编程神器OpenCode

对于个人开发者而言&#xff0c;选择 OpenCode 国产开源编程模型 的组合&#xff0c;本质上是用开源工具 国产高性价比模型复刻了甚至超越了硅谷顶尖付费产品的AI编程体验。 让我们开始安装并使用开源AI编程神器OpenCode吧&#xff01; 一&#xff0c;第一步&#xff1a;环境…

作者头像 李华