我无法找到这个问题的直接答案,但这里是:
假设我有一个拥有最大打开文件1024的主机:
[root@host]# ulimit -a open files (-n) 1024
以及在该主机中运行的docker容器:
[root@container]# ulimit -a open files (-n) 1048576
如果我尝试打开超过1024个文件,我会在容器中遇到问题吗?我认为在这种情况下容器的实际限制将是1024个文件.你怎么看?
真正的限制将是1048576.
看一下这个图像的右侧部分,它显示容器基本上只是在同一操作系统上运行的独立进程:
由于容器中的每个系统调用都将由主机OS直接处理,因此显示的ulimit(1048576)直接来自主机OS,这是将要使用的值.
例如,ulimit的差异可能是由Docker配置引起的.
(请注意,对于VM,这将是不同的:客户操作系统可能会显示值1048576,但是打开的调用最终将由主机操作系统处理,这将限制为1024)
虽然有点晚了,但我只是想澄清对ulimit差异的疑虑.
如果在运行容器时进行net设置,则容器中显示的ulimit值来自主机OS.问题是,为什么从主机运行相同的命令时会看到不同的值?
这是因为在主机中运行命令时,它显示其软限制.另一方面,容器显示的值是主机OS的硬限制.原因是您可以越过软限制.所以从某种意义上说,硬限制实际上是真正的限制.您可以在此链接中找到有关ulimit的更多信息.
要查看硬限制,只需键入以下命令即可
ulimit -Hn
您将看到值匹配.
注意你不能越过硬限制,但如果你是根,你可以增加它.