news 2026/5/1 11:40:05

使用 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/5/1 3:49:26

人群仿真软件:Pathfinder_(3).人群建模与行为设置

人群建模与行为设置 在人群仿真软件中&#xff0c;人群建模与行为设置是至关重要的步骤&#xff0c;它直接影响到仿真的准确性和可靠性。本节将详细介绍如何在Pathfinder中进行人群建模和行为设置&#xff0c;包括人群属性的定义、行为模式的选择和自定义行为的创建。 1. 人群…

作者头像 李华
网站建设 2026/5/1 4:50:39

《机器学习》第 7 章 - 神经网络与深度学习

前言 大家好&#xff01;今天给大家分享《机器学习》第 7 章的核心内容 —— 神经网络与深度学习。这一章是机器学习从 “浅层” 走向 “深层” 的关键&#xff0c;我会用通俗易懂的语言拆解核心概念&#xff0c;搭配完整可运行的 Python 代码和直观的可视化对比图&#xff0c;…

作者头像 李华
网站建设 2026/5/1 4:53:34

9个最佳性能测试工具(2026)

1、前言 性能测试检查软件程序在预期工作负载下的速度、响应时间、可靠性、资源使用情况和可扩展性。性能测试的目的不是发现功能缺陷&#xff0c;而是消除软件或设备中的性能瓶颈。 性能测试为利益相关者提供有关其应用程序的速度、稳定性和可扩展性的信息。更重要的是&…

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

基于springboot的植物花卉销售管理系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;没有什么华丽的语言&#xff0…

作者头像 李华
网站建设 2026/5/1 4:56:16

看似平平无奇的00后,居然一跃上岸字节,表示真的卷不过......

又到了一年一度的求职旺季金&#xff01;三&#xff01;银&#xff01;四&#xff01;在找工作的时候都必须要经历面试这个环节。在这里我想分享一下自己上岸字节的面试经验&#xff0c;过程还挺曲折的&#xff0c;但是还好成功上岸了。大家可以参考一下&#xff01; 0821测评 …

作者头像 李华