如何在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。

  1. lxc_template.go删除lxc_template.go并重新编译lxc_template.go 。 那么你可以设置ulimit为你喜欢的高。

要么

  1. 停止docker恶魔。 更改主机上的ulimit设置。 开始docker恶魔。 它现在有你修改的限制,以及它的subprocess。

我应用了第二种方法:

  1. sudo service docker stop;

  2. 改变了/etc/security/limits.conf中的限制

  3. 重新启动机器

  4. 运行我的容器

  5. 在容器中运行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:看看这个博客文章更清晰