据我所知,如果我们需要在Linux系统中调整“打开文件”nofile
(软和硬),我们需要运行命令ulimit
或在相关的配置文件中设置永久设置。但我对在主机中运行的容器的设置有点困惑
例如,如果一个Linux操作系统将ulimit
nofile设置为1024(软)和硬(4096),并且我使用--ulimit nofile=10240:40960
运行docker,那么容器可以使用比主机更多的nofile吗?
更新
在我的环境中,当前设置为dockers运行,
- 在主机上(Debian)- 65535(软)65535(硬)
- Docker守护程序设置Max - 1048576(软)1048576(硬)
- default docker run - 1024(软)4096(硬)
- 定制的docker运行- 10240(软)40960(硬)
我发现应用程序可以运行大约100 K打开的文件,然后崩溃。如何理解这一点?
什么是真实的极限?
1条答案
按热度按时间vnzz0bqm1#
例如,如果一个Linux操作系统将
ulimit
nofile设置为1024(软)和硬(4096),并且我使用----ulimit nofile=10240:40960
运行docker,那么容器可以使用比它的主机更多的nofile吗?CAP_SYS_RESOURCE
功能。这意味着Docker可以设置与主机不同的ulimit
。根据man 2 prlimit
:特权进程(在Linux下:在初始用户名称空间中具有CAP_RESOURCE能力的用户)可以对任一限制值进行任意改变。
1048576
限制,所以你的40960**将像一个魅力一样工作。--ulimit
设置为高于节点但低于守护进程本身,你不会发现任何问题,也不需要像下面的例子那样给予额外的权限:/etc/init.d/docker
文件上设置dockerd的新限制:ulimit
,这有点棘手,但可行,参考这里。securityContext.priviledged: true
,这样你就可以在容器内以root身份运行命令ulimit
,这里有一个例子: