You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用docker --cgroup-parent指定cgroup报错(cgroups v2环境)

问题分析与解决思路

你的问题出在Docker与systemd cgroup驱动的适配规则上,结合cgroups v2的特性,具体错误点和修正方案如下:

核心错误原因

当Docker使用systemd作为cgroup驱动时(Ubuntu 18.04搭配Docker 20.10默认可能启用该驱动),--cgroup-parent参数要求传入systemd风格的slice单元名称(格式需为xxx.slice或父slice/子slice.slice),而非直接使用sysfs文件系统路径。同时你手动创建的cgroup目录名称不符合slice命名规则,且容器运行命令中指定的cgroup路径与实际创建的路径不匹配。


解决步骤

1. 确认Docker的cgroup驱动

先检查当前Docker使用的cgroup驱动类型:

docker info | grep "Cgroup Driver"

如果输出为Cgroup Driver: systemd,则必须遵循systemd的slice命名规则;如果是cgroupfs,则可直接使用sysfs路径(后续有切换驱动的方案)。

2. 正确创建符合要求的cgroup

方式一:用systemd命令自动创建(推荐)

无需手动操作sysfs,直接通过systemd命令创建带资源统计的slice:

systemd-run --unit=mygroup.slice --slice=mygroup.slice \
  --property=CPUAccounting=true \
  --property=MemoryAccounting=true \
  --property=IOAccounting=true \
  --property=PIDsAccounting=true \
  /bin/true

这条命令会自动在/sys/fs/cgroup/system.slice/下生成mygroup.slice目录,并自动配置好所需的资源控制子系统。

方式二:手动操作sysfs创建

如果坚持手动创建,需将目录名改为.slice结尾以符合systemd规则:

mkdir /sys/fs/cgroup/system.slice/mygroup.slice
cd /sys/fs/cgroup/system.slice/mygroup.slice
echo +cpuset +cpu +io +memory +pids > cgroup.subtree_control

3. 正确运行Docker容器

指定--cgroup-parent时使用systemd的slice名称,而非sysfs路径:

docker run --cgroup-parent=system.slice/mygroup.slice \
  -p 5201-5202:5201-5202 \
  -v /root:/root \
  -it \
  --entrypoint "/bin/bash" \
  docker-stress

额外适配方案:切换Docker到cgroupfs驱动

如果你更习惯直接使用sysfs路径作为cgroup parent,可以修改Docker配置切换到cgroupfs驱动:

  1. 编辑/etc/docker/daemon.json(不存在则新建):
{
  "exec-opts": ["native.cgroupdriver=cgroupfs"]
}
  1. 重启Docker服务:
systemctl restart docker
  1. 此时可直接使用你最初创建的mygroup目录路径运行容器:
docker run --cgroup-parent=/sys/fs/cgroup/system.slice/mygroup \
  -p 5201-5202:5201-5202 \
  -v /root:/root \
  -it \
  --entrypoint "/bin/bash" \
  docker-stress

内容的提问来源于stack exchange,提问作者Will MacGregor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 21:36:33