在运行 ubuntu:xenial(macOS 主机)的 Docker 容器中为 memlock 设置 ulimit 时出现“不允许操作”错误

在运行 ubuntu:xenial(macOS 主机)的 Docker 容器中为 memlock 设置 ulimit 时出现“不允许操作”错误

我在像这样启动的容器中设置“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

下面的命令在 Mac 上的 bash shell #1 中从上述命令启动的 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

结束:复制细节

任何提示或指导不胜感激。

答案1

我的朋友 Chris Cellucci 给了我答案:使用 --privileged 运行

我将在今天或明天对此进行更详细的阐述。

答案2

如果让 docker 提供这个能力的话,那就不好了。

在Linux上我的猜测是它是能力CAP_IPC_LOCK

为什么需要锁定,这通常不是一个好主意,也不是必需的。它不会阻止休眠时的交换。

我在这里检查过https://docs.docker.com/docker-for-mac/docker-toolbox/#the-docker-toolbox-environmentMac 上的 docker 有两个版本。两者都在虚拟机内的 Linux 实例上的容器中运行。因此,功能将是相关的:您必须添加适当的功能。看http://man7.org/linux/man-pages/man7/capability.7.html

相关内容