我认为docker
容器与主机共享了这些属性。但是,在一台docker
主机上,有以下ulimit
设置:
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) 63399
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 63399
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
但是在一个容器中,有人得到了
ulimit -a
-f: file size (blocks) unlimited
-t: cpu time (seconds) unlimited
-d: data seg size (kb) unlimited
-s: stack size (kb) 8192
-c: core file size (blocks) unlimited
-m: resident set size (kb) unlimited
-l: locked memory (kb) 64
-p: processes unlimited
-n: file descriptors 65536
-v: address space (kb) unlimited
-w: locks unlimited
-e: scheduling priority 0
-r: real-time priority 0
专门查看-n
设置-容器是否因为主机受到限制而限制为1024个打开文件?谁能解释一下容器内ulimit
的含义与基础docker
宿主的含义之间的区别吗?
答案 0 :(得分:1)
Docker可以在容器启动期间设置资源限制,并且您可以在启动容器时使用--ulimit
参数来调整这些设置。可以通过在容器启动过程中strace
进行containerd
过程来轻松地验证它,例如,以下命令
$ docker run -it --ulimit nofile=1024 alpine
将产生以下跟踪:
prlimit64(7246, RLIMIT_NOFILE, {rlim_cur=1024, rlim_max=1024}, <unfinished ...>
并在容器中检查ulimit
会得到预期的极限值:
-n: file descriptors 1024
在运行没有显式指定--ulimit
的容器时,此检查会给出不同的值(可能从containerd
继承),例如:
-n: file descriptors 1048576
为什么允许Docker将限制设置为高于通过检查主机上的ulimit
所观察到的限制?打开man 2 prlimit
:
A privileged process (under Linux: one with the CAP_SYS_RESOURCE capability
in the initial user namespace) may make arbitrary changes to either limit value.
这意味着具有CAP_SYS_RESOURCE
功能的任何进程都可以设置任何资源限制,而Docker具有此功能。您可以通过检查CapEff
文件的/proc/$PID/status
字段来检查它,其中$PID
是containerd
进程的PID,然后使用capsh --decode
对该值进行解码:< / p>
$ pidof docker-containerd
675
$ cat /proc/675/status | grep CapEff
CapEff: 0000003fffffffff
$ capsh --decode=0000003fffffffff
0x0000003fffffffff=cap_chown,<...>,cap_sys_resource,<...>
总结:是的,Docker可能会增加容器的资源限制,因为它有这样做的特权,您可以使用--ulimit
参数来调整这些限制。