如何在Docker容器上设置ulimit /文件描述符,图片标签是phusion / baseimage-docker
我需要在docker容器上正确设置文件描述符限制,我使用ssh连接到容器( https://github.com/phusion/baseimage-docker )
已经尝试:
- 编辑limits.conf容器忽略这个文件
- 新手程序在https://coderwall.com/p/myodcqfind,但是这个docker图像具有不同types的init进程。 (运行)
- 我试图在/etc/pam.d中修改pam库的configuration
- 尝试在sshd_config中为ssh启用pam
它的输出总是一样的。
bash: ulimit: open files: cannot modify limit: Operation not permitted
最新的docker支持通过命令行和API设置ulimits。 例如, docker run
需要--ulimit <type>=<soft>:<hard>
,可以有任意数量的这些。 所以,对于你的nofile,一个例子是--ulimit nofile=262144:262144
经过一番search之后,我在Google小组讨论中发现了这一点:
docker工目前禁止这种能力,以提高安全性。
这是因为主机系统的ulimit设置适用于docker容器。 在容器中运行的程序可以改变主机的ulimit设置被认为是一种安全风险。
好消息是你有两种不同的解决scheme可供select。
- 从
lxc_template.go
删除lxc_template.go
并重新编译lxc_template.go
。 那么你可以设置ulimit为你喜欢的高。
要么
- 停止docker恶魔。 更改主机上的ulimit设置。 开始docker恶魔。 它现在有你修改的限制,以及它的subprocess。
我应用了第二种方法:
-
sudo service docker stop;
-
改变了/etc/security/limits.conf中的限制
-
重新启动机器
-
运行我的容器
-
在容器中运行
ulimit -a
以确认打开的文件限制已被inheritance。
请参阅: https : //groups.google.com/forum/#!searchin/docker-user/limits/docker-user/T45Kc9vD804/v8J_N4gLbacJ
我已经尝试了很多select,并不确定为什么上面提出的一些解决scheme在一台机器上工作,而不是在其他机器上工作。 一个解决scheme,工作,这是简单的,可以工作每个容器是:
docker run –ulimit memlock = 819200000:819200000 -h –name = current -v / home / user_home:/ user_home -i -d -t docker_user_name / image_name
其实我已经尝试了上面的答案,但似乎没有工作。
为了让我的容器承认ulimit的变化,我必须在启动之前更新docker.conf文件:
$ sudo service docker stop $ sudo bash -c "echo \"limit nofile 262144 262144\" >> /etc/init/docker.conf" $ sudo service docker start
这是我做的。
在文件/etc/init.d/docker中设置ulimit -n 32000
并重新启动泊坞窗服务
docker run -ti node:latest /bin/bash
运行这个命令来validation
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
对于boot2docker,我们可以在/var/lib/boot2docker/profile
设置它,例如:
ulimit -n 2018
被警告不要设置这个限制太高,因为它会减慢apt-get! 看错误#1332440 。 我和debian jessie一起。
--ulimit
docker run
命令有一个--ulimit
标志,您可以使用此标志来设置--ulimit
容器中打开的文件限制。
在启动容器时运行以下命令来设置打开的文件限制。
docker run --ulimit nofile=<softlimit>:<hardlimit>
冒号前的第一个值表示软文件限制,冒号后的值表示硬文件限制。 您可以通过在交互模式下运行容器并在容器shell ulimit -n
执行以下命令来validation这一点
PS:看看这个博客文章更清晰