深入解析 Docker 容器进程的 cgroup 和命名空间信息

深入解析 Docker 容器进程的 cgroup 和命名空间信息

在现代 Linux 系统中,控制组(cgroup)和命名空间(namespace)是实现容器化技术的核心机制。cgroup 用于管理和限制进程的资源使用(如 CPU、内存、I/O),而命名空间则通过隔离进程的资源视图(如 PID、网络、文件系统)实现进程间的独立性。本文以一个实际案例为基础,详细分析 PID 为 31613 的 Docker 容器进程的 cgroup 和命名空间信息,解释其输出内容,并探讨它们在容器隔离中的作用。

背景介绍

我们分析的进程(PID 31613)运行在一个 Docker 容器中,容器 ID 为 5871bca38e79cd1f65801adea8f6e44b5475696f343cbaf4e4b43cf77bc803b8。通过检查 /proc/31613/cgroup/proc/31613/ns 目录,我们可以了解该进程的资源限制和隔离配置。以下是详细的分析步骤和输出解释。

一、cgroup 信息的查看与解析

1. 查看 cgroup 信息

要查看进程的 cgroup 信息,可以使用以下命令:

cat /proc/31613/cgroup

输出如下:

11:devices:/docker/5871bca38e79cd1f65801adea8f6e44b5475696f343cbaf4e4b43cf77bc803b8
10:pids:/docker/5871bca38e79cd1f65801adea8f6e44b5475696f343cbaf4e4b43cf77bc803b8
9:perf_event:/docker/5871bca38e79cd1f65801adea8f6e44b5475696f343cbaf4e4b43cf77bc803b8
8:cpuset:/docker/5871bca38e79cd1f65801adea8f6e44b5475696f343cbaf4e4b43cf77bc803b8
7:memory:/docker/5871bca38e79cd1f65801adea8f6e44b5475696f343cbaf4e4b43cf77bc803b8
6:blkio:/docker/5871bca38e79cd1f65801adea8f6e44b5475696f343cbaf4e4b43cf77bc803b8
5:hugetlb:/docker/5871bca38e79cd1f65801adea8f6e44b5475696f343cbaf4e4b43cf77bc803b8
4:freezer:/docker/5871bca38e79cd1f65801adea8f6e44b5475696f343cbaf4e4b43cf77bc803b8
3:net_prio,net_cls:/docker/5871bca38e79cd1f65801adea8f6e44b5475696f343cbaf4e4b43cf77bc803b8
2:cpuacct,cpu:/docker/5871bca38e79cd1f65801adea8f6e44b5475696f343cbaf4e4b43cf77bc803b8
1:name=systemd:/docker/5871bca38e79cd1f65801adea8f6e44b5475696f343cbaf4e4b43cf77bc803b8

2. 输出解析

输出格式为 层级ID:控制器:路径,表明系统使用的是 cgroup v1(多个控制器分别列出)。每个控制器对应一种资源管理功能,路径 /docker/<container_id> 表示该进程属于指定 Docker 容器的 cgroup 层级。以下是每个控制器的作用:

  • devices(层级 11):限制设备访问权限(如 /dev/sda),确保容器无法直接操作主机设备。
  • pids(层级 10):限制容器内最大进程数,防止 fork 炸弹攻击。
  • perf_event(层级 9):支持性能监控(如 CPU 计数器),用于容器性能分析。
  • cpuset(层级 8):限制进程可使用的 CPU 核心和内存节点,优化资源分配。
  • memory(层级 7):限制内存使用量,防止内存耗尽(如通过 memory.limit_in_bytes 设置)。
  • blkio(层级 6):限制块设备 I/O 带宽或 IOPS,避免 I/O 竞争。
  • hugetlb(层级 5):限制大页内存使用,常见于高性能应用。
  • freezer(层级 4):支持暂停/恢复容器进程,用于迁移或调试。
  • net_prio,net_cls(层级 3):管理网络优先级和流量分类,实现网络隔离。
  • cpuacct,cpu(层级 2):统计和限制 CPU 使用(如通过 cpu.shares 设置权重)。
  • name=systemd(层级 1):systemd 管理的 cgroup,用于与 Docker 集成。

3. 意义

  • 资源隔离:每个控制器为容器分配独立的资源限制,确保容器不会过度占用主机资源。
  • Docker 管理:路径 /docker/<container_id> 表明 Docker 通过 systemd 和 cgroup v1 管理容器资源。
  • 进一步查看:可通过 /sys/fs/cgroup/<控制器>/docker/<container_id> 检查具体限制,如内存上限:
cat /sys/fs/cgroup/memory/docker/5871bca38e79cd1f65801adea8f6e44b5475696f343cbaf4e4b43cf77bc803b8/memory.limit_in_bytes

二、命名空间信息的查看与解析

1. 查看命名空间信息

要查看进程的命名空间信息,可以检查 /proc/31613/ns 目录:

cd /proc/31613/ns
ls

输出如下:

ipc  mnt  net  pid  user  uts

2. 输出解析

/proc/31613/ns 目录下的每个文件是符号链接,对应一种命名空间类型,指向内核中的命名空间标识符。列出的命名空间及其作用如下:

  • ipc:隔离 System V IPC 和 POSIX 消息队列,防止容器间 IPC 干扰。
  • mnt:隔离文件系统挂载点,容器有独立的挂载视图(如 Docker 的根文件系统)。
  • net:隔离网络资源(如网络接口、IP 地址),支持容器网络模式(如桥接)。
  • pid:隔离进程 ID,容器内 PID 从 1 开始,与主机隔离。
  • user:隔离用户和组 ID 映射,支持 rootless 容器等安全特性。
  • uts:隔离主机名和域名,容器可设置独立主机名。

3. 缺失的命名空间

输出中未出现以下命名空间:

  • cgroup:隔离 cgroup 视图,可能因系统未启用 cgroup 命名空间(常见于 cgroup v1)。
  • time:隔离系统时间,可能是内核版本较旧(Linux 5.6 后支持)。
  • pid_for_children:子进程的 PID 命名空间,缺失表明未创建嵌套 PID 命名空间。

4. 意义

  • 容器隔离:这些命名空间确保容器在 IPC、文件系统、网络、PID、用户和主机名方面与主机和其他容器隔离。
  • Docker 配置:Docker 默认分配 ipc, mnt, net, pid, uts 命名空间,user 命名空间视配置启用。
  • 系统环境:主机名为 VM-4-12-centos,可能运行较旧的 CentOS 系统,限制了某些命名空间(如 time)。

5. 进一步分析

要获取更多细节,可执行以下操作:

  • 查看 inode 号:检查命名空间标识符,确认是否共享:
ls -l /proc/31613/ns

示例输出:

lrwxrwxrwx 1 root root 0 Apr 24 12:00 ipc -> ipc:[4026531839]
lrwxrwxrwx 1 root root 0 Apr 24 12:00 mnt -> mnt:[4026531840]
lrwxrwxrwx 1 root root 0 Apr 24 12:00 net -> net:[4026531992]
lrwxrwxrwx 1 root root 0 Apr 24 12:00 pid -> pid:[4026531836]
lrwxrwxrwx 1 root root 0 Apr 24 12:00 user -> user:[4026531837]
lrwxrwxrwx 1 root root 0 Apr 24 12:00 uts -> uts:[4026531838]
  • 相同 inode 号表示共享命名空间。

  • 检查网络配置:查看容器网络命名空间:

nsenter --net=/proc/31613/ns/net ip addr
  • 检查挂载点:查看容器文件系统挂载:
cat /proc/31613/mounts
  • 检查 PID:确认容器内 PID:
grep NSpid /proc/31613/status

示例输出:

NSpid: 31613 1
  • 表示主机 PID 为 31613,容器内 PID 为 1(主进程)。

三、综合分析

1. cgroup 和命名空间的协同作用

  • cgroup:通过控制器(如 memory, cpu)限制资源使用,确保容器不会影响主机或其他容器。
  • 命名空间:通过隔离资源视图(如 net, pid)实现容器环境的独立性。
  • Docker 实现:Docker 结合 cgroup v1 和命名空间,为容器分配独立的资源限制和隔离环境。

2. 系统环境推测

  • cgroup v1:输出显示多个控制器,表明系统使用 cgroup v1,未启用 cgroup 命名空间。
  • CentOS 系统:主机名 VM-4-12-centos 提示可能为 CentOS 系统,内核版本可能较旧,限制了 time 等新命名空间。
  • Docker 配置:标准的 Docker 命名空间配置(ipc, mnt, net, pid, uts, user),表明这是一个典型容器进程。

3. 实际应用

  • 资源管理:通过 cgroup 信息,管理员可监控和调整容器的资源限制(如增加 CPU 配额)。
  • 隔离调试:通过命名空间信息,可确认容器隔离效果(如检查网络配置)。
  • 故障排查:若容器行为异常,可通过 /proc/[pid]/ns/proc/[pid]/cgroup 分析问题根因。

四、总结

通过分析 PID 31613 的 cgroup 和命名空间信息,我们深入了解了 Docker 容器如何通过 cgroup v1 实现资源限制,以及通过命名空间实现进程隔离。cgroup 输出显示了多个控制器(如 memory, cpu),为容器分配独立的资源限制;命名空间输出(ipc, mnt, net, pid, user, uts)确保容器环境的独立性。这些机制共同构成了 Docker 的核心隔离和资源管理能力。

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

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

相关文章

【汽车ECU电控数据管理篇】S19文件格式解析篇章

一、S19格式是啥 在电控文件管理的初期阶段&#xff0c;我首次接触到的是 A2L 和 HEX 文件。其中&#xff0c;A2L 文件主要承担着描述性功能&#xff0c;它详细地描述了各种参数和配置等相关信息。而 HEX 文件则是一种刷写文件&#xff0c;其内部明确记录了具体的地址以及对应的…

python编程相关的单词

the: 在编程中&#xff0c;“the” 是一个常见的英语单词&#xff0c;用于指定特定的对象或变量。例如&#xff0c;“the function” 指的是某个特定的函数。 the的拼写是t,h,e.再读一次t,h,e and: 在编程中&#xff0c;“and” 是一个逻辑运算符&#xff0c;用于连接两个条件&…

网络原理 - 4(TCP - 1)

目录 TCP 协议 TCP 协议段格式 可靠传输 几个 TCP 协议中的机制 1. 确认应答 2. 超时重传 完&#xff01; TCP 协议 TCP 全称为 “传输控制协议”&#xff08;Transmission Control Protocol&#xff09;&#xff0c;要对数据的传输进行一个详细的控制。 TCP 协议段格…

python博客爬虫列表

我希望对指定网页的&#xff0c;博客列表&#xff0c;获取url&#xff0c;然后保存成本地文件&#xff0c;用python实现 step1: import requests from bs4 import BeautifulSoup import jsondef get_blog_links(url):headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win6…

软件测试入门学习笔记

今天学习新知识&#xff0c;软件测试。 什么是软件测试&#xff1f; 使用人工和自动手段来运行或测试某个系统的过程&#xff0c;目的在于检验它是否满足规定的需求或弄清实际结果与预期结果之间的差别。 软件测试的目的&#xff1f; 1&#xff09;为了发现程序&#xff0…

uniapp开发2--uniapp中的条件编译总结

以下是对 uni-app 中条件编译的总结&#xff1a; 概念&#xff1a; 条件编译是一种技术&#xff0c;允许你根据不同的平台或环境&#xff0c;编译不同的代码。 在 uni-app 中&#xff0c;这意味着你可以编写一套代码&#xff0c;然后根据要编译到的平台&#xff08;例如微信小…

【k8s】sidecar边车容器

一、Sidecar 模式简介 Sidecar 模式是一种常见的微服务架构设计模式。它通过将附加功能或服务与主应用程序部署在同一容器或主机上&#xff0c;从而实现对主应用程序的增强和扩展。Sidecar 的名称来源于摩托车的边车&#xff0c;它与摩托车紧密相连&#xff0c;为主车提供额外…

MySQL索引使用一定有效吗?如何排查索引效果?

MySQL索引使用一定有效吗&#xff1f;如何排查索引效果&#xff1f; 1. 索引一定有效吗&#xff1f; 不一定&#xff01; 即使你创建了索引&#xff0c;MySQL 也可能因为以下原因 不使用索引 或 索引效果不佳&#xff1a; 索引选择错误&#xff1a;MySQL 优化器可能选择了错…

漏洞管理体系:从扫描评估到修复验证的全生命周期实践

漏洞管理体系&#xff1a;从扫描评估到修复验证的全生命周期实践 在网络安全防御体系中&#xff0c;漏洞管理是“攻防博弈”的核心战场。据NVD&#xff08;国家漏洞数据库&#xff09;统计&#xff0c;2023年新增漏洞超21万个&#xff0c;平均每天披露575个&#xff0c;其中32…

cdh平台管理与运维最佳实践

一、容量规划:构建可持续扩展的数据湖底座 1.1 资源评估三维模型 #mermaid-svg-4Fd5JDKTgwqF1BUd {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-4Fd5JDKTgwqF1BUd .error-icon{fill:#552222;}#mermaid-svg-4Fd5J…

力扣347:前K个高频元素

给你一个整数数组 nums 和一个整数 k &#xff0c;请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 示例 1: 输入: nums [1,1,1,2,2,3], k 2 输出: [1,2]示例 2: 输入: nums [1], k 1 输出: [1]题解&#xff1a; 一、思路&#xff1a; 1.我希望将nu…

前馈神经网络层

FeedForward Network 论文地址 https://arxiv.org/pdf/1706.03762 前馈网络介绍 前馈网络是Transformer模型中的关键组件&#xff0c;每个Transformer层包含一个多头注意力模块和一个前馈网络模块。该模块通过两次线性变换和激活函数&#xff0c;为模型提供非线性建模能力。其核…

如何将 sNp 文件导入并绘制到 AEDT (HFSS)

导入 sNp 文件 打开您的项目&#xff0c;右键单击 “Result” 绘制结果 导入后&#xff0c;用户可以选择它进行打印。请参阅下面的示例。要点&#xff1a;确保从 Solution 中选择它。

es-核心储存原理介绍

原始数据 idusernamegradedescription1ahua87i like study2xiaowang92i like es3zhaoyun63i like java 倒排索引 description使用的text分词&#xff0c;使用倒排索引 termidi1,2,3like1,2,3study1es2java3 分词后&#xff0c;如果匹配 es&#xff0c;则需要逐行匹配&…

jmeter中监控服务器ServerAgent

插件下载&#xff1a; 将ServerAgent上传至需要监控的服务器&#xff0c;mac/liunx启动startAgent.sh&#xff08;启动命令&#xff1a;./startAgent.sh&#xff09; 在jmeter中添加permon监控组件 配置需要监控的服务器IP地址&#xff0c;添加需要监控的资源 注意&#xf…

UML 状态图:以共享汽车系统状态图为例

目录 一、初识 UML 状态图 二、共享汽车系统状态图详解 &#xff08;一&#xff09;初始状态与车辆空闲状态 &#xff08;二&#xff09;用户预定相关状态 &#xff08;三&#xff09;等待取车与用户取车状态 &#xff08;四&#xff09;用户还车及后续状态 三、状态图绘…

橙子果品分级-目标检测数据集(包括VOC格式、YOLO格式)

橙子果品分级-目标检测数据集&#xff08;包括VOC格式、YOLO格式&#xff09; 数据集&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1jpdrylu06mm0r9pGVyb-AQ?pwd94a6 提取码: 94a6 数据集信息介绍&#xff1a; 共有 9195 张图像和一一对应的标注文件 标注文件格式…

uniapp 仿企微左边公司切换页

示例代码&#xff1a; <template><view class"container"><!-- 遮罩层 --><view class"mask" v-if"showSidebar" click"closeSidebar"></view><!-- 侧边栏 --><view class"sidebar"…

pyqt中以鼠标所在位置为锚点缩放图片

在编写涉及到图片缩放的pyqt程序时&#xff0c;如果以鼠标为锚点缩放图片&#xff0c;图片上处于鼠标所在位置的点&#xff08;通常也是用户关注的图片上的点&#xff09;不会移动&#xff0c;更不会消失在图片显示区域之外&#xff0c;可以提高用户体验&#xff0c;是一个值得…

巧记英语四级单词 Unit5-中【晓艳老师版】

ignore v.无视&#xff0c;不理睬 发音“一个闹”&#xff0c;对付一个无理取闹的孩子&#xff0c;最好的方式就是无视 不理睬ignorant a.无知的&#xff0c;不礼貌的 对于什么事都无视&#xff0c;中国第一个不平等条约问也不知道就是无知的neglect n.忽视 negative消极的&a…