对于cgroupv2,默认情况下,Docker为cgroup使用私有命名空间。这由docker run的D1标志和default-cgroupns-mode守护进程选项控制。我需要在容器中创建子cgroup,但是the问题是容器中的根cgroup有一个空的cgroup.subtree_control**!*我无法在容器中填充它,因为到容器运行时,这个根cgroup已经有进程了。尝试这样做会导致“设备或资源繁忙”错误。
--cgroupns host是一个解决方案,但它只是一个解决方案;它不使用私有名称空间,如果可能的话,我想保留这个名称空间。另一个问题是,当前有不行从一个复合文件中设置它。
我查看了--cgroup-parent,它可以通过撰写文件进行设置。不过,我不太明白这种情况。我在主机上创建了一个cgroup,并写信给subtree_control,然后尝试使用该cgroup作为父容器启动一个容器。我收到了这个错误,我不明白:
来自守护进程的错误响应: systemd cgroup的cgroup-parent应该是一个名为"xxx.slice“的有效切片。
我认为此设置将在以下引用cgroup_namespaces手册的上下文中更改“当前cgroup目录”:
当进程使用带有CLONE_NEWCGROUP标志的克隆(2)或unshare(2)创建新的cgroup命名空间时,其当前cgroup目录将成为新命名空间的cgroup根目录。
在任何情况下,在启动容器之前要求在主机上手动配置cgroup是很麻烦的。为了确保容器中的cgroup.subtree_control具有我需要的控制器,我需要哪些替代方案?
发布于 2021-12-21 01:42:49
在容器中创建一个子cgroup,将/sys/fs/cgroup/cgroup.procs中的每个PID移动到子容器中,然后/sys/fs/cgroup/cgroup.subtree_control可以被写入,而不会出现任何“设备或资源繁忙”错误。
https://unix.stackexchange.com/questions/683012
复制相似问题