如何将mlock系统调用授予通过" sudo rkt run"调用的容器。关于CoreOs

时间:2016-03-31 13:04:32

标签: coreos linux-capabilities rkt

按以下方式运行我的应用程序:

sudo rkt run --insecure-options=image --interactive --net=host ./myapp.aci

我收到消息:

  

无法锁定内存:无法分配内存

经过一些挖掘后,似乎表明容器没有传递给它的CAP_IPC_LOCK能力。我已经挖掘了一些文档,但无法找到我需要添加配置的位置或任何启用此选项的选项。我该怎么做?

2 个答案:

答案 0 :(得分:3)

ACI可以使用isolator of type os/linux/capabilities-retain-set在其清单中指定所需的上限。

要检查清单是否包含这样的隔离器,可以使用actool:

$ actool cat-manifest --pretty-print ./myapp.aci

您可能会看到以下内容:

    "isolators": [
        {
            "name": "os/linux/capabilities-retain-set",
            "value": {
                "set": [
                    "CAP_IPC_LOCK"
                ]
            }
        }
    ]

要添加CAP_IPC_LOCK,您可以使用:

$ actool patch-manifest --capability=CAP_IPC_LOCK --replace ./myapp.aci

目前无法直接在rkt run命令行上添加功能。我在GitHub上针对此功能请求提交了一个问题:coreos/rkt#2371

答案 1 :(得分:3)

您可以使用acbuild为您的容器提供正确的功能。

如果您已经使用acbuild制作ACI,只需将此行添加到构建脚本中:

echo '{ "set": ["CAP_IPC_LOCK"] }' | acbuild isolator add "os/linux/capabilities-retain-set" -

或者,如果您尚未使用acbuild制作ACI,则可以使用--modify标志修改现有ACI。所以命令是:

echo '{ "set": ["CAP_IPC_LOCK"] }' | acbuild --modify path/to/your/app.aci isolator add "os/linux/capabilities-retain-set" -