限制在docker容器内启动的进程数

时间:2015-01-30 14:22:58

标签: docker pam

我试图尽量减少码头集装箱内叉式炸弹造成的伤害。

我使用pam_limits/etc/security/limits.conf文件是

1000:1128 hard nproc 40
1000:1128 soft nproc 40

这意味着id在范围[1000..1128]内的任何用户最多可以有40个进程。如果我用具有这种id的用户在shell中运行forkbomb,这可以正常工作。

但是当我在docker容器中运行fork炸弹时,这些限制没有被应用,所以当我运行命令时

# docker run -u 1000 ubuntu bash -c ":() { : | : & }; :; while [[ true ]]; do sleep 1; done"

我有尽可能多的进程,所有这些进程都属于id = 1000的用户。

出了什么问题?我该如何解决?

2 个答案:

答案 0 :(得分:1)

运行容器时,有一个选项可以限制pid的数量:

  

--pids-limit:调整容器的pids限制(将-1设置为无限制)

命令为:

docker container run --pids-limit 100 your-image

参考:https://docs.docker.com/engine/reference/commandline/run/#options

答案 1 :(得分:0)

与PAM无关,但是您可以使用“ docker create”命令来限制Docker容器,例如,Enduro/X项目使用了一些IPC队列限制,但是您可以以相同的方式设置其他ulimit设置,例如进程数为“ -ulimit nproc = 256:512”,即软限制和硬限制。

例如:

$ sudo docker create --name bankapp-inst -it \
  --sysctl fs.mqueue.msg_max=10000 \
  --sysctl fs.mqueue.msgsize_max=1049600 \
  --sysctl fs.mqueue.queues_max=10000 \
  --ulimit msgqueue=-1 \
  --ulimit nproc=256:512 \
  bankapp 

因此,在设置nproc之后,最多只能生成256个进程,如果更改了ulimit,则上限为512个进程。希望这会有所帮助!