如何将 docker 容器的 POSIX 消息队列限制设置为无限制。
我知道 --ulimit 是一个可以与 docker run 一起使用的选项,但我不太确定如何将 --ulimit 选项与 docker run 一起用于 POSIX 消息队列。
尝试了以下但没有成功:
docker run -it --ulimit msgqueue=unlimited
还尝试在容器内进行以下操作
ulimit -q unlimited
错误:不允许操作
您可以将 POSIX 消息队列大小设置为无限制,如下所示:
docker run --ulimit msgqueue=-1
。在 Docker 版本上测试了它20.10.5
。
在容器内,您可以通过运行
ulimit -a
来确认它确实是无限的:
root@3385ae319f68:/# 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) 15217
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 50000
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) unlimited # <----------
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) unlimited
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
在我的例子中,如果我不设置
--ulimit msgqueue=-1
选项,则该值为 819200。
知道docker中的--ulimit不支持unlimited值
做法是
docker run -it --ulimit msgqueue=100000000:100000000
100000000 代表 100GB
我将它与其他参数一起使用:
docker run -u "$(id -u)":"$(id -g)" \
--sysctl fs.mqueue.queues_max=1024 \
--sysctl fs.mqueue.msg_max=512 \
--ulimit msgqueue=-1 \
....
如果我打开第二个根窗口(docker exec -it -u 0 bash)并将其设置在那里(ulimit -q unlimited),它只能在这个窗口中工作,这没有用......