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