news 2026/2/26 9:42:01

使用 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/2/25 23:27:09

【2026年-03期】Collaborative evolution between AI and humans

这是一幅关于 AI 与人类协作进化的逻辑全景图&#xff0c;它梳理了从 AI 技术迭代到人类能力重塑&#xff0c;再到二者形成新协作模式的完整逻辑链条。AI 演进与人类能力的底层逻辑AI 演进的双轮驱动AI 演化速度&#xff1a;从 GPT-3 → GPT-4 → GPT-5&#xff0c;模型能力不断…

作者头像 李华
网站建设 2026/2/24 21:47:45

边界之内:为何高维内插无法催生下一次科学革命?

在一个被大数据和人工智能的承诺所笼罩的时代&#xff0c;一种信念日益深入人心&#xff1a;只要有足够的数据和强大的算法&#xff0c;我们就能自动解锁自然界最深邃的奥秘。机器学习模型在蛋白质折叠、材料发现和气候预测等领域取得的惊人成就&#xff0c;似乎都在为这一愿景…

作者头像 李华
网站建设 2026/2/24 5:50:32

Spring Boot 三种方式登录系统:集成微信扫码、短信验证码、邮箱验证码

Spring Boot 三种方式登录系统&#xff1a;集成微信扫码、短信验证码、邮箱验证码&#xff08;含高并发与安全增强&#xff09; 主要因为前面的帖子不太完整。 一、引言 在现代 Web 应用中&#xff0c;提供多种灵活、安全的登录方式已成为标配。本文档旨在提供一套生产就绪的…

作者头像 李华
网站建设 2026/2/26 6:26:23

HTML5 与 H5:别再让你的专业度在称呼中流失

在中国互联网行业的日常交流中&#xff0c;很少有一个词像“H5”这样被高频使用&#xff0c;却又被如此普遍地误解。当你听到有人说“做一个 H5”时&#xff0c;对方指的往往是一个在微信朋友圈传播的精美幻灯片&#xff0c;或者是一个简单的营销小游戏。然而&#xff0c;当你打…

作者头像 李华
网站建设 2026/2/24 9:26:38

3-VueAjax

什么是Vue Vue是一款用于构建用户界面的渐进式的JavaScript框架。官方网站&#xff1a;https://cn.vuejs.org/ 前端负责将数据以美观的样式呈现出来&#xff0c;而数据最终又要在数据库服务器中存储并管理。前端想要拿到数据&#xff0c;就需要请求服务器。然后服务器将数据返…

作者头像 李华
网站建设 2026/2/19 7:57:40

基于springBoot的房屋租赁管理系统

房屋租赁管理系统的背景意义 市场需求驱动 随着城市化进程加快&#xff0c;流动人口增多&#xff0c;房屋租赁需求持续增长。传统租赁方式依赖中介或线下沟通&#xff0c;效率低且信息不透明。数字化管理系统能优化流程&#xff0c;提升供需匹配效率&#xff0c;降低交易成本…

作者头像 李华