Ubuntu

在執行 ubuntu:xenial(macOS 主機)的 Docker 容器中為 memlock 設置 ulimit 時出現“不允許操作”錯誤

  • November 25, 2020

我在像這樣啟動的容器中設置“memlock”系統限制時遇到問題:

  docker run -it ubuntu:xenial

簡而言之,這是我嘗試過的:

在 bash 終端會話 1 中:

docker run -it ubuntu:xenial

設置/etc/security/limits.conf為包括這些行 `* hard memlock unlimited

  • soft memlock unlimited`

在文件的末尾。

然後,從主機 ‘bash in’ 上的另一個 bash 終端到同一個容器並嘗試執行以下操作:

root@6ae391cfb6de:/# ulimit -l unlimited

我收到此錯誤:

bash: ulimit: max locked memory: cannot modify limit: Operation not permitted

重現細節

我在 MacOS Sierra 10.12.6 / Docker 版本 18.03.1-ce 上執行,建構 9ee9f40

外殼 #1

macOS> ulimit -l # output of this command is 'unlimited' which shows host ulimits are not the issue 輸出為:無限制

macOS> docker run -it ubuntu:xenial

下面的命令在 bash shell #1 中從 Mac 上的上述命令啟動的 xenial-docker-instance 中執行

cd  # to home directory
grep limit .bashrc      # check it any session limits are defined at shell startup -- nothing found

cat >> /etc/security/limits.conf <<EOF
*                hard    memlock         unlimited
*                soft    memlock         unlimited
EOF

Mac 上的 Shell #2

containerId=`docker ps | grep ubuntu | sed -e's/ .*//'`  # assumes you only have one docker instance of ubuntu running
docker exec -t -i $containerId  bash                     # 'bash in' to ubuntu running container launched in shell #2
ulimit -l 
# output  is 82000    ... huh?
#
# try setting
ulimit -l unlimited
#
#  Nope.. i get this error: 
#       bash: ulimit: max locked memory: cannot modify limit: Operation not permitted

結束:重現細節

非常感謝任何提示或指導。

我的朋友 Chris Cellucci 給了我答案:使用 –privileged 執行

我將在今天或明天更詳細地對此進行擴展。

給 docker 提供這種能力是不好的。

在 Linux 上,我的猜測是它是能力CAP_IPC_LOCK

為什麼需要鎖定,這通常不是一個好主意,或者需要。它不會阻止休眠交換。

我在這裡檢查了https://docs.docker.com/docker-for-mac/docker-toolbox/#the-docker-toolbox-environment mac 上的 docker 有兩個版本。兩者都在虛擬機中的 linux 實例上的容器中執行。因此,功能將是相關的:您必須添加適當的功能。見http://man7.org/linux/man-pages/man7/capabilities.7.html

引用自:https://unix.stackexchange.com/questions/450799