我需要在docker容器上正确设置文件描述符限制 我用ssh(https://github.com/phusion/baseimage-docker)
连接到容器已经尝试过:
输出总是一样的。
bash: ulimit: open files: cannot modify limit: Operation not permitted
答案 0 :(得分:39)
最新的docker支持通过命令行和API设置ulimits。例如,docker run
需要--ulimit <type>=<soft>:<hard>
,并且可以根据需要添加尽可能多的--ulimit nofile=262144:262144
。所以,对于你的nofile,一个例子是countrycode
答案 1 :(得分:26)
经过一些搜索后,我在Google小组讨论中发现了这一点:
docker目前禁止此功能以增强安全性。
这是因为主机系统的ulimit设置适用于docker容器。在容器中运行的程序可以更改主机的ulimit设置被视为安全风险。
好消息是您有两种不同的解决方案可供选择。
sys_resource
移除lxc_template.go
并重新编译docker。然后
您可以根据自己的喜好设置ulimit。或
我应用了第二种方法:
sudo service docker stop;
更改了 /etc/security/limits.conf中的限制
重启机器
运行我的容器
在容器中运行ulimit -a
以确认已继承开放文件限制。
请参阅:https://groups.google.com/forum/#!searchin/docker-user/limits/docker-user/T45Kc9vD804/v8J_N4gLbacJ
答案 2 :(得分:7)
我尝试了很多选项,并且不确定为什么上面提到的一些解决方案可以在一台机器上工作而不在其他机器上工作。
一个有效但简单且可以按容器运行的解决方案是:
<div id="myElementId"></div>
答案 3 :(得分:4)
实际上,我已经尝试了上面的答案,但它似乎没有用。
要让我的容器确认ulimit
更改,我必须在启动它们之前更新docker.conf
文件:
$ sudo service docker stop
$ sudo bash -c "echo \"limit nofile 262144 262144\" >> /etc/init/docker.conf"
$ sudo service docker start
答案 4 :(得分:3)
这就是我所做的。
组
ulimit -n 32000
在文件/etc/init.d/docker
并重新启动docker服务
docker run -ti node:latest /bin/bash
运行此命令以验证
user@4d04d06d5022:/# ulimit -a
应该在结果中看到这个
<强> open files (-n) 32000
强>
[user@ip ec2-user]# docker run -ti node /bin/bash
user@4d04d06d5022:/# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 58729
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 32000
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 58729
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
答案 5 :(得分:3)
如果使用docker-compose文件, 基于docker compose版本2.x 我们可以通过覆盖默认配置来进行如下设置。
ulimits:
nproc: 65535
nofile:
soft: 26677
hard: 46677
答案 6 :(得分:1)
docker run
命令有一个--ulimit
标志,您可以使用此标志设置docker容器中的打开文件限制。
在启动容器时运行以下命令以设置打开文件限制。
docker run --ulimit nofile=<softlimit>:<hardlimit>
冒号前的第一个值表示软文件限制,冒号后的值表示硬文件限制。您可以通过以交互模式运行容器并在容器shell ulimit -n
PS:查看此blog帖子以获得更清晰
答案 7 :(得分:0)
对于boot2docker,我们可以在/var/lib/boot2docker/profile
上设置它,例如:
ulimit -n 2018
警告不要将此限制设置得太高,因为它会减慢apt-get!请参阅错误#1332440。我和debian jessie一起玩了。