如何在docker容器上设置ulimit/file描述符图像标记为phusion/baseimage docker
我需要在docker容器上正确设置文件描述符限制 我使用ssh()连接到容器 已尝试:如何在docker容器上设置ulimit/file描述符图像标记为phusion/baseimage docker,docker,ulimit,Docker,Ulimit,我需要在docker容器上正确设置文件描述符限制 我使用ssh()连接到容器 已尝试: edit limits.conf容器忽略此文件 在找到upstart过程,但此docker映像具有不同类型的初始化过程。(runit) 我试图在/etc/pam.d中修改pam库的配置 尝试在sshd_config中为ssh启用pam 输出总是一样的 bash: ulimit: open files: cannot modify limit: Operation not permitted 经过一些搜索
- edit limits.conf容器忽略此文件
- 在找到upstart过程,但此docker映像具有不同类型的初始化过程。(runit)
- 我试图在/etc/pam.d中修改pam库的配置
- 尝试在sshd_config中为ssh启用pam
bash: ulimit: open files: cannot modify limit: Operation not permitted
经过一些搜索,我在谷歌群组讨论中发现了以下内容: docker目前禁用此功能以增强安全性 这是因为主机系统的ulimit设置应用于docker容器。容器中运行的程序可能会更改主机的ulimit设置,这被视为一种安全风险 好消息是,您有两种不同的解决方案可供选择
lxc\u模板中删除sys\u资源
。转到
并重新编译docker。然后
您可以将ulimit设置为您喜欢的最高值sudo服务码头站代码>
ulimit-a
,确认已继承打开的文件限制请看:事实上,我已经尝试了上述答案,但似乎不起作用 为了让我的容器确认
ulimit
更改,我必须在启动它们之前更新docker.conf
文件:
$sudo服务码头站
$sudobash-c“echo\”限制文件262144 262144\“>>/etc/init/docker.conf”
$sudo服务docker启动
以下是我所做的
设置
ulimit-n32000
在文件/etc/init.d/docker中
然后重新启动docker服务
docker-run-ti节点:最新/bin/bash
运行此命令以验证
user@4d04d06d5022:/#ulimit-a
我们应该在结果中看到这一点
打开文件(-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
请注意,不要将此限制设置得太高,因为它会减慢速度!见小虫。我对debian jessie很满意。最新的docker支持通过命令行和API设置ulimit。例如,
docker-run
需要--ulimit=:
并且可以有任意多个。因此,对于您的nofile,一个例子是--ulimit nofile=262144:262144
我尝试了许多选项,不确定为什么上面建议的一些解决方案在一台机器上有效,而在其他机器上无效
一个简单有效的解决方案是:
docker run--ulimit memlock=819200000:819200000-h--name=current-v/home/user\u home:/user\u home-i-d-t docker\u user\u name/image\u name
docker run命令有一个--ulimit
标志,您可以使用该标志设置docker容器中的打开文件限制
在旋转容器以设置打开的文件限制时,运行以下命令
docker run--ulimit nofile=:
冒号前的第一个值表示软文件限制,冒号后的值表示硬文件限制。您可以通过在交互模式下运行容器并在容器shell中执行以下命令来验证这一点ulimit-n
PS:如果使用docker compose文件,请查看此帖子以了解更多信息, 基于docker compose 2.x版 通过覆盖默认配置,我们可以如下设置
ulimits:
nproc: 65535
nofile:
soft: 26677
hard: 46677
当机器重新启动后启动时,这些更改不会占主导地位,但一旦我们在机器启动后重新启动docker的服务,容器就会采用所需的配置。另外,在中有一个关于更改
/etc/security/limits.conf
的有用教程,您知道为什么需要重新启动吗?为什么不重新启动shell呢?这是否意味着特定容器比其他容器具有更高的ulimit?主机的ulimit是否保持不变?@garbagecollector是,这意味着特定容器的ulimit高于其他容器。这是因为如果在docker run命令中未指定--ulimit,那么容器将从docker守护进程继承默认ulimit。而且,主机的ulimit保持完全不变。@Suhaschikkana只是为了确保,如果容器最大“打开的文件”限制高于带下划线的主机最大“打开的文件”,容器限制是否会被忽略?另请参见--sysctl fs.mqueue.msg_max=10000
样式设置