2016-03-31 24 views
0

調用的容器如下運行我的應用程序:如何授予m鎖系統調用通過「命令RKT運行」上CoreOs

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

我得到的消息:

失敗鎖定內存:不能分配內存

經過一些挖掘後,似乎表明該容器沒有CAP_IPC_LOCK能力傳遞給它。我已經挖掘了一些文檔,但無法找到我需要添加配置或任何選項來啓用它。我該怎麼做呢?

回答

2

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 

目前無法直接在上添加功能命令行。我在GitHub上針對此功能請求提出了一個問題:coreos/rkt#2371

+0

謝謝,我已經到了接近這個結論,但認爲我給別人一個機會來回答。我之前並不知道修補程序清單功能,我已經設置了我的ACI構建過程以使用jq修改它,謝謝!我也發現它的工作,我也不得不解壓ACI,在可執行文件上使用「setcap cap_ipc_lock = + ep」,然後使用bsdtar重新創建ACI,以便保留可執行文件的功能,因爲acbuild文件沒有保留這些屬性在最初的ACI中。將此添加到完整性的答案中,或者提供一個替代方案,我會接受它。 – Benjamin

2

您可以使用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" -

+0

有用的知道,我也可以使用acbuild來做到這一點。有關檔案中可執行文件的「setcap cap_ipc_lock = + ep」狀態的更多信息,除了通過bsdtar的解包/設置功能/重新包裝按照我對其他答案的評論以外的其他方式保留? – Benjamin

+1

如果在ACI中有一個'setcap'二進制文件,你可以用'acbuild run'運行它,但是如果沒有的話,我認爲唯一的方法就是用bsdtar的方式。 –

+0

謝謝,將看看是否有問題反對acbuild保留'複製'帽標誌,如果不是,打開一個。我將把答案授予@Alban,因爲答案首先在隔離器設置上得到了答案。 – Benjamin

相關問題