首页/云/Docker 容器速查/确认 cgroup 版本与驱动
资源与安全50 条

确认 cgroup 版本与驱动

cgroup v1 与 v2 在内存、IO、swap 相关行为上不同:限制类问题先看 Cgroup Version 与 CgroupDriver,再谈参数。

Docker 容器速查云更新于 2026-10-13

为什么要先确认 cgroup 版本

cgroup v1 与 v2 在内存、IO、swap 相关行为上差别明显:限制类问题应当先看 docker info 里的 Cgroup Version 与 Cgroup Driver,再讨论具体参数。同一台机器上集成的组件(例如编排代理)也要与 Docker 使用一致的驱动。

基本信息

查看docker info 的 Cgroup Version 与 Cgroup Driver
影响面内存、swap、IO 权重等选项映射不同
联动同机的编排代理需与 Docker 驱动一致
宿主侧信息/sys/fs/cgroup/cgroup.controllers 与 mount 输出
提示位docker info 顶部的 WARNING 段

典型使用场景

  • 内存或 swap 限制不生效时,先确认 cgroup 版本再改参数
  • 排查 IO 权重类参数为什么没有效果
  • 部署编排代理时核对两边驱动设置是否一致
  • 系统升级后资源统计异常,回溯 cgroup 版本变化
  • 写环境基线文档时记录版本与驱动,避免后续误判
  • 对比新旧宿主的 cgroup 版本,判断升级是否引入了行为差异

核对命令

核对命令
docker info -f 'CgroupVersion={{.CgroupVersion}} Driver={{.CgroupDriver}}'
cat /sys/fs/cgroup/cgroup.controllers 2>/dev/null   # cgroup v2 可用控制器列表
mount | grep cgroup | head -3                        # 挂载层级,判断 v1 或 v2
docker info 2>/dev/null | grep -iA3 WARNING          # 关注能力缺失提示

v1 与 v2 的差异

项目cgroup v1cgroup v2
挂载层级多层级,按控制器分开统一层级
内存软限memory.soft_limit_in_bytesmemory.low
IO 权重blkio.weightio.weight
swap 相关memory.memsw 系列memory.swap 系列
文本版 docker info 顶部的 WARNING 段会提示 cgroup 相关能力缺失(例如不支持 swap 限制),环境排查先读它。
看到 WARNING: No swap limit support 时,内存与 swap 限制行为可能不符合预期,需要提前告知业务方,别等上线才发现。
编排代理与 dockerd 的 cgroup 驱动不一致会带来资源统计与限制行为差异,混合部署时要逐项核对。
不同发行版默认的 cgroup 版本不同,换机型或换镜像模板时资源参数需要重新验证,不要沿用旧机器的结论。
cgroup v2 的目录结构与 v1 不同,监控采集脚本里硬编码 v1 路径会在新版机器上采不到数据,采集口径要按版本分别适配。
容器内 /sys/fs/cgroup 的可见范围受命名空间设置影响,核对限制数值时先确认容器内看到的是自己那层视图还是宿主视图。

易错点

  • 忽略 docker info 顶部的 WARNING,导致内存或 swap 限制行为与预期不符
  • cgroup v1 与 v2 参数映射不同,照抄旧机器的参数会写成不生效的项
  • 编排代理与 dockerd 的 cgroup 驱动不一致会带来资源统计差异,混合部署要逐项核对
  • 换发行版或换机型后 cgroup 版本可能变化,资源参数要重新验证而不是沿用旧结论

数据来源与参考

  • Docker 官方文档:Docker and cgroup v2(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌