如何在docker容器上设置ulimit / file描述符,image标签是phusion / baseimage-docker

时间:2014-06-20 01:08:06

标签: docker ulimit

我需要在docker容器上正确设置文件描述符限制 我用ssh(https://github.com/phusion/baseimage-docker

连接到容器

已经尝试过:

  • 编辑limits.conf容器忽略此文件
  • https://coderwall.com/p/myodcq找到的upstart过程,但此docker镜像具有不同类型的init进程。 (runit)
  • 我尝试修改/etc/pam.d
  • 中pam库的配置
  • 尝试在sshd_config
  • 中为ssh启用pam

输出总是一样的。

bash: ulimit: open files: cannot modify limit: Operation not permitted

8 个答案:

答案 0 :(得分:39)

最新的docker支持通过命令行和API设置ulimits。例如,docker run需要--ulimit <type>=<soft>:<hard>,并且可以根据需要添加尽可能多的--ulimit nofile=262144:262144。所以,对于你的nofile,一个例子是countrycode

答案 1 :(得分:26)

经过一些搜索后,我在Google小组讨论中发现了这一点:

  

docker目前禁止此功能以增强安全性。

这是因为主机系统的ulimit设置适用于docker容器。在容器中运行的程序可以更改主机的ulimit设置被视为安全风险。

好消息是您有两种不同的解决方案可供选择。

  1. sys_resource移除lxc_template.go并重新编译docker。然后 您可以根据自己的喜好设置ulimit。
    1. 停止码头恶魔。更改主机上的ulimit设置。开始 码头恶魔。它现在有你修改的限制和它的孩子 流程也是如此。
    2. 我应用了第二种方法:

      1. sudo service docker stop;

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

      3. 重启机器

      4. 运行我的容器

      5. 在容器中运行ulimit -a以确认已继承开放文件限制。

      6. 请参阅: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

https://docs.docker.com/compose/compose-file/

答案 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一起玩了。