【问题标题】:Error 50007 when creating cgroup with cgroup_new_cgroup使用 cgroup_new_cgroup 创建 cgroup 时出现错误 50007
【发布时间】:2017-03-03 15:56:55
【问题描述】:

我有一个在docker container 中运行的进程(docker 将该进程放在 cgroup 中)。该进程分叉,我想将一些forks 放入cgroups

我在我的程序中添加了以下代码:

cgroup_init();

struct cgroup *my_cgroup = cgroup_new_cgroup(cg_name);
cgroup_add_controller(my_cgroup, "cpu");

int cgroup_cr = cgroup_create_cgroup_from_parent(my_cgroup, 0);

cgroup_r 为 50007(“Cgroup,不允许操作”)。我不知道这是为什么?我需要更改一些配置吗?是否需要能力

【问题讨论】:

    标签: c docker cgroups


    【解决方案1】:

    我相信修改 cgroups 的访问权限将允许进程逃离 docker 容器,因此 docker 会默认禁用它。您可以通过以下方式运行容器来测试问题是否仅出在某个功能上:

    docker run --cap-add=ALL ...
    

    您很可能需要 SYS_ADMIN 之类的权限,并且能够减少添加到特定项目的功能。

    如果添加功能不能解决您的问题,您可以通过以下方式删除所有限制:

    docker run --privileged ...
    

    更多详情请见:

    【讨论】:

    • 实际上,我发现问题完全是另外一回事,但您的答案是缺少链接:程序本身使用 libcap 删除功能(以 root 身份)并且无法访问 cgroup fs any更长。将 CAP_DAC_OVERRIDE 添加到 cap-list 解决了这个问题。
    猜你喜欢
    • 2013-08-21
    • 1970-01-01
    • 2017-01-06
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-25
    • 2014-11-24
    相关资源
    最近更新 更多