首页/云/Docker 容器速查/docker run --cgroup-parent 指定父 cgroup
资源与安全50 条

docker run --cgroup-parent 指定父 cgroup

把容器放进指定 cgroup(如 systemd slice 或自定义层级):与宿主既有的资源治理体系对接,便于统一限额与统计。

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

cgroup 与容器归属

cgroup 是 Linux 内核的资源隔离机制,Docker 在 Linux 上正是靠它给容器限定 CPU、内存与 IO。默认情况下容器会被挂到 daemon 自己所在的层级下面;--cgroup-parent 允许你指定另一个父 cgroup,把容器接进宿主机既有的资源治理体系,让限额、统计、清理都以同一套层级为准。它只在 Linux 上有效,Windows 容器不支持这个选项。

基本信息

适用平台Linux 宿主(cgroup v1 / v2 均可),Windows 容器不支持
语法docker run --cgroup-parent=<slice 名或层级路径>
systemd 驱动写 slice 名,如 myapp.slice
cgroupfs 驱动写相对 cgroup 根的路径,如 /myapp
先看驱动docker info 的 Cgroup Driver 与 Cgroup Version
验证docker inspect -f '{{.HostConfig.CgroupParent}}' <容器>

典型使用场景

  • 把同一业务的容器收进一个 slice,用 systemd 统一设上下限并看用量
  • 让容器与宿主上的同类服务共处一层,避免两套限额各自为政
  • 给离线批处理划独立层级,防止它把在线服务的资源挤掉
  • 编排器的常规做法:kubelet 按 QoS 把 Pod 容器挂到 kubepods.slice 之下
  • 排查资源争抢时先把嫌疑容器移到单独父组,隔离变量后再复现

用法与验证

用法与验证
docker info --format '{{.CgroupDriver}} {{.CgroupVersion}}'   # 先确认驱动与 cgroup 版本
# systemd 驱动写 slice 名,cgroupfs 驱动写 /myapp 这类相对路径
docker run -d --name api --cgroup-parent=myapp.slice --memory 512m --cpus 1 app/api:1.4.2
docker inspect -f '{{.HostConfig.CgroupParent}}' api   # 确认启动参数已被记录
systemctl status myapp.slice --no-pager | head -15   # systemd 侧看父组用量与限额
cat /proc/$(docker inspect -f '{{.State.Pid}}' api)/cgroup   # 从进程视角核对真实归属

限额从哪一层来

层级限额设置位置对容器的影响
父 slice(systemd)slice unit 的 CPUQuota、MemoryMax 等属性组内成员共享组限额,先撞组限额就先被限制
父路径(cgroupfs)直接写组目录下的 cpu.max、memory.max同上,需自行维护这些文件
容器自身docker run 的 --memory、--cpus 等参数只在组限额之内生效,最终取更严的一侧
宿主同组进程由组归属决定,与容器无关组级用量统计会把容器与宿主进程混在一起
systemd 驱动下容器默认以 docker-<id>.scope 的形式挂在 daemon 所属 slice 里。一旦用 --cgroup-parent 接管归属,父组策略就成了容器资源的上限来源,改完要用 systemctl status 或 /proc/<pid>/cgroup 复核,不要只信 CLI 的回显。
cgroup v1 与 v2 的层级组织方式不同:v1 各控制器各有自己的树,v2 是统一层级。跨机器复制同一条命令前,先对比 docker info 里的 Cgroup Driver 与 Cgroup Version,任一不同都可能让容器落到预期之外的位置。
把容器挂进已有严格限额的 slice 之前,先看该组当前用量与配额:组限额由全部成员共享,新加入的容器可能直接把组打满,连带同组的其他服务一起受限。

易错点

  • 漏写 .slice 后缀或路径不存在时,不同驱动下表现不一致(有的报错、有的自行创建),先建好父组再挂接最稳。
  • 父组限额比容器自身参数更严时,实际上限由父组决定;只看 docker stats 容易误判成容器参数没生效。
  • 停止一个 slice 会连带终止其下所有子 unit,把生产容器放进会被人手动 stop 的组里,等于埋下一次批量重启。
  • 同一父组内所有容器共享组级统计,混合业务放一组后资源用量很难归因,排查期按业务分开更省事。

数据来源与参考

  • Docker 官方 CLI 参考:docker run --cgroup-parent(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌