【Docker系列】Docker 容器内安装`ps`命令

news2025/6/2 21:14:38

csdn

博客目录

    • 一、为什么需要在 Docker 容器中安装`ps`命令
    • 二、不同 Linux 发行版的安装方法
      • 1. Alpine Linux 镜像的安装方法
      • 2. Debian/Ubuntu 镜像的安装方法
      • 3. CentOS/RHEL 镜像的安装方法
    • 三、验证安装与基本使用
    • 四、永久解决方案:修改 Dockerfile
      • 1. Alpine 基础镜像的 Dockerfile 示例
      • 2. Debian/Ubuntu 基础镜像的 Dockerfile 示例
    • 五、替代方案与高级技巧
      • 1. 使用`docker top`命令
      • 2. 通过`/proc`文件系统查看
      • 3. 使用`py-spy`进行高级分析
    • 六、生产环境最佳实践

一、为什么需要在 Docker 容器中安装ps命令

在 Docker 容器的日常管理和故障排查过程中,ps命令是一个不可或缺的工具。作为"process status"的缩写,ps命令能够显示当前正在运行的进程信息,包括进程 ID(PID)、CPU 和内存使用情况、启动时间等关键数据。

然而,许多官方 Docker 镜像为了保持轻量级,往往会移除这些"非必要"的工具。例如,基于 Alpine Linux 的镜像大小通常只有 5MB 左右,而包含完整工具集的常规 Linux 镜像可能达到 50MB 以上。这种精简设计虽然优化了镜像大小和安全性,但在调试时却带来了不便。

当我们在容器内执行ps命令时,可能会遇到"command not found"的错误。这时就需要我们根据不同的 Linux 发行版,采用相应的方法来安装ps命令。
在这里插入图片描述

二、不同 Linux 发行版的安装方法

1. Alpine Linux 镜像的安装方法

Alpine Linux 因其极小的体积而广受欢迎,是 Docker 官方镜像中最常用的基础镜像之一。在 Alpine 中安装ps命令需要以下步骤:

docker exec -it 你的容器名或ID apk add --no-cache procps

这里的apk是 Alpine Linux 的包管理工具,相当于 Ubuntu 的apt或 CentOS 的yum--no-cache选项告诉包管理器不要缓存下载的索引,有助于保持容器精简。

值得注意的是,在 Alpine 中ps命令包含在procps包中,而不是单独的ps包。安装完成后,可以使用ps auxps -ef等常用参数组合来查看进程信息。

2. Debian/Ubuntu 镜像的安装方法

基于 Debian 或 Ubuntu 的 Docker 镜像使用 APT 包管理系统,安装ps命令的步骤如下:

docker exec -it 你的容器名或ID apt-get update && apt-get install -y procps

这个命令首先更新软件包索引(apt-get update),然后安装procps包(apt-get install -y procps)。-y参数表示自动回答"yes"以避免安装过程中需要手动确认。

Debian 系列的procps包不仅包含ps命令,还包括topfreevmstat等常用系统监控工具,对于调试非常有用。

3. CentOS/RHEL 镜像的安装方法

对于基于 Red Hat Enterprise Linux(RHEL)或 CentOS 的 Docker 镜像,需要使用 YUM 或 DNF 包管理器:

docker exec -it 你的容器名或ID yum install -y procps-ng

在较新的 CentOS/RHEL 版本中,procps-ngprocps的下一代版本,提供了更完善的进程管理工具集。安装完成后,ps命令的使用方式与其他 Linux 发行版一致。

三、验证安装与基本使用

安装完成后,可以通过以下命令验证ps命令是否可用:

docker exec -it 你的容器名或ID ps aux

这个命令会显示容器内所有运行中的进程,输出通常包括以下列:

  • USER:进程所有者
  • PID:进程 ID
  • %CPU:CPU 使用百分比
  • %MEM:内存使用百分比
  • VSZ:虚拟内存大小
  • RSS:常驻内存大小
  • TTY:终端关联
  • STAT:进程状态
  • START:启动时间
  • TIME:CPU 使用时间
  • COMMAND:命令名称/命令行

常用的ps命令参数组合包括:

  • ps aux:显示所有用户的所有进程
  • ps -ef:完整格式显示所有进程
  • ps -e --forest:以树状结构显示进程层级关系
  • ps -o pid,ppid,user,cmd:自定义输出列

四、永久解决方案:修改 Dockerfile

如果某个镜像需要频繁调试,更好的做法是在构建镜像时就包含这些调试工具,而不是每次进入容器后再安装。这可以通过修改 Dockerfile 实现。

1. Alpine 基础镜像的 Dockerfile 示例

FROM alpine:latest
RUN apk add --no-cache procps
# 其他构建指令...

2. Debian/Ubuntu 基础镜像的 Dockerfile 示例

FROM debian:latest
RUN apt-get update && apt-get install -y procps && rm -rf /var/lib/apt/lists/*
# 其他构建指令...

在这个示例中,我们不仅安装了procps,还清理了 APT 缓存(rm -rf /var/lib/apt/lists/*),这是 Docker 镜像最佳实践之一,可以显著减少镜像大小。

五、替代方案与高级技巧

在某些情况下,可能无法直接在容器内安装ps命令,比如:

  • 容器以只读文件系统运行
  • 没有足够的权限安装软件包
  • 容器极其精简,甚至没有包管理器

这时可以考虑以下替代方案:

1. 使用docker top命令

从宿主机上直接查看容器的进程信息:

docker top 你的容器名或ID

这个命令的优势是不需要进入容器,也不需要容器内有ps命令,但显示的信息相对有限。

2. 通过/proc文件系统查看

Linux 的/proc文件系统包含了大量进程信息,即使没有ps命令也可以直接查看:

docker exec 你的容器名或ID ls /proc

每个数字命名的目录对应一个进程 ID,目录内的文件包含该进程的详细信息。例如,查看进程的 cmdline:

docker exec 你的容器名或ID cat /proc/1/cmdline

3. 使用py-spy进行高级分析

py-spy是一个 Python 进程分析工具,不需要目标进程做任何修改:

docker exec 你的容器名或ID py-spy top

这个工具特别适合分析 Python 应用的性能问题,可以显示 CPU 使用率最高的 Python 调用栈。

六、生产环境最佳实践

在生产环境中使用这些调试工具时,需要注意以下几点:

  1. 最小化原则:调试完成后,应该卸载临时安装的工具:
docker exec -it 你的容器名或ID apk del procps
  1. 只读文件系统处理:如果容器以只读文件系统运行,需要临时挂载可写文件系统:
docker run --tmpfs /run --tmpfs /tmp ...
  1. 调试镜像策略:对于无包管理器的极简镜像,可以创建调试专用的派生镜像:
docker commit 容器ID 临时调试镜像名
docker run -it --entrypoint /bin/sh 临时调试镜像名
  1. 安全考虑:避免在生产容器中永久安装调试工具,可以考虑:
    • 使用 Sidecar 容器模式
    • 构建时包含调试工具,但运行时使用多阶段构建去除
    • 使用专门的调试镜像临时挂载到生产容器

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2394092.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为OD机试真题——生成哈夫曼树(2025A卷:100分)Java/python/JavaScript/C/C++/GO六种最佳实现

2025 A卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 本文收录于专栏:《2025华为OD真题目录+全流程解析/备考攻略/经验分享》 华为OD机试真题《生成…

大厂前端研发岗位设计的30道Webpack面试题及解析

文章目录 一、基础核心二、配置进阶三、性能优化四、Loader原理五、Plugin机制六、高级应用七、工程化实战八、原理深挖九、异常处理十、综合场景一、基础核心 Webpack的核心概念是什么? 解析:入口(entry)、输出(output)、加载器(loader)、插件(plugins)、模式(mode)。Loader…

Oracle中EXISTS NOT EXISTS的使用

目录 1.IN与EXISTS EXISTS用法总结 2.NOT IN与NOT EXISTS 3.not in 中 null的用法 4.EXISTS和IN的区别 (面试常问) 1.IN与EXISTS 示例:在 DEPT 表中找出在 EMP 表中存在的部门编号; 方法一:使用in select DEPTNO from DEPT where D…

01.认识Kubernetes

什么是Kubernets 套用官方文档对Kubernetes的定义,翻译成中文的意思是: Kubernetes,也称为k8,是一个用于自动化部署、扩展和管理容器化应用程序的开源系统。 它将组成应用程序的容器分组为逻辑单元,以便于管理和发现…

【PostgreSQL 02】PostgreSQL数据类型革命:JSON、数组与地理信息让你的应用飞起来

PostgreSQL数据类型革命:JSON、数组与地理信息让你的应用飞起来 关键词 PostgreSQL高级数据类型, JSONB, 数组类型, PostGIS, 地理信息系统, NoSQL, 文档数据库, 空间数据, 数据库设计, PostgreSQL扩展 摘要 PostgreSQL的高级数据类型是其区别于传统关系数据库的核心…

Acrobat DC v25.001 最新专业版已破,像word一样编辑PDF!

在数字化时代,PDF文件以其稳定性和通用性成为了文档交流和存储的热门选择。无论是阅读、编辑、转换还是转曲,大家对PDF文件的操作需求日益增加。因此,一款出色的PDF处理软件不仅要满足多样化的需求,还要通过简洁的界面和强大的功能…

桥 接 模 式

在玩游戏的时候我们常常会遇到这样的机制:我们可以随意选择不同的角色,搭配不同的武器。这时只有一个抽象上下文的策略模式就不那么适用了,因为一旦我们使用继承的方式,武器和角色总有一方会变得难以扩展。这时,我们就…

基于 Flink+Paimon+Hologres 搭建淘天集团湖仓一体数据链路

摘要:本文整理自淘天集团高级数据开发工程师朱奥老师在 Flink Forward Asia 2024 流式湖仓论坛的分享。内容主要为以下五部分: 1、项目背景 2、核心策略 3、解决方案 4、项目价值 5、未来计划 01、项目背景 1.1 当前实时数仓架构 当前的淘天实时架构是从…

多杆合一驱动城市空间治理智慧化

引言:城市“杆林困境”与智慧化破局 走在现代城市的街道上,路灯、监控、交通信号灯、5G基站等杆体林立,不仅侵占公共空间,更暴露了城市治理的碎片化问题。如何让这些“沉默的钢铁”升级为城市的“智慧神经元”?答案在…

用QT写一个车速表

主要包含以下绘制步骤: 1、绘制画布: /** 绘制画布 */ void Widget::initCanvas(QPainter &painter) {//消除锯齿painter.setRenderHint(QPainter::Antialiasing,true);//设置底色painter.setBrush(QColor(0,0,0));painter.drawRect(rect());//平移…

数控技术应用理实一体化平台VR实训系统

::产品概述:: 目前我国本科类院校学生普遍存在的问题就是缺少对实际工作的了解,一直在学习相关专业的理论知识,对社会的相关企业的用人情况不了解。这也就直接导致了毕业的学生和社会上的用人单位需求有点脱节,这也是由于我国的现行本科教育侧…

C# 将HTML文档、HTML字符串转换为图片

在.NET开发中,将HTML内容转换为图片的需求广泛存在于报告生成、邮件内容存档、网页快照等场景。Free Spire.Doc for .NET作为一款免费的专业文档处理库,无需Microsoft Word依赖,即可轻松实现这一功能。本文将深入解析HTML文档和字符串转图片两…

界面控件DevExpress WinForms v24.2新版亮点:富文本编辑器功能全新升级

DevExpress WinForms拥有180组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜…

华为云Flexus+DeepSeek征文|华为云 Flexus X 加速 Dify 平台落地:高性能、低成本、强可靠性的云上选择

目录 前言 1 一键部署 Dify 平台的完整步骤 1.1 选择模板 1.2 参数配置 1.3 资源栈设置 1.4 配置确认与部署 2 Flexus X 服务器的技术优势 2.1 柔性算力随心配 2.2 一直加速一直快 2.3 越用越省降本多 2.4 安全可靠更放心 3 Flexus X 在 Dify 解决方案中的性能体验…

Jenkins 2.479.1安装和邮箱配置教程

1.安装 在JDK安装并设置环境变量完成后,下载官网对应的war版本,在对应目录下打开命令行窗口并输入 java -jar jenkins.war其余参数感兴趣可以自行查阅,这里启动的 jenkins 服务默认占用8080端口,在浏览器输入 localhost:8080进入…

DFS入门刷题c++

目录 821. 跳台阶 - AcWing题库 ​92. 递归实现指数型枚举 - AcWing题库 ​P1706 全排列问题 - 洛谷 (luogu.com.cn) P1157 组合的输出 - 洛谷 (luogu.com.cn) ​P1036 [NOIP 2002 普及组] 选数 - 洛谷 (luogu.com.cn) P2089 烤鸡 - 洛谷 (luogu.com.cn) P1088 [NOIP 2…

ToolsSet之:十六进制及二进制编辑运算工具

ToolsSet是微软商店中的一款包含数十种实用工具数百种细分功能的工具集合应用,应用基本功能介绍可以查看以下文章: Windows应用ToolsSet介绍https://blog.csdn.net/BinField/article/details/145898264 ToolsSet中Number菜单下的Hex Operate工具可以进…

【Python训练营打卡】day40 @浙大疏锦行

DAY 40 训练和测试的规范写法 知识点回顾: 1. 彩色和灰度图片测试和训练的规范写法:封装在函数中 2. 展平操作:除第一个维度batchsize外全部展平 3. dropout操作:训练阶段随机丢弃神经元,测试阶段eval模式关闭dropo…

MCP Server的五种主流架构:从原理到实践的深度解析

🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 在AI大模型与外部数据交互的浪潮中,MCP Server(Model Context Protocol Server)已成为连接模型与现实世界的桥梁。本文…

跨协议协同智造新实践:DeviceNet-EtherCAT网关驱动汽车焊接装配效能跃迁

在汽车制造领域,机器人协作对于提升生产效率与产品质量至关重要。焊接、装配等关键环节,需要机器人与各类设备紧密配合。JH-DVN-ECT疆鸿智能的devicenet从站转ethercat主站协议网关,成为实现这一高效协作的得力助手,尤其是在连接欧…