限制 docker 容器内启动的进程数
Limit number of processes started inside docker container
我正在尝试将 docker 容器内的叉形炸弹造成的损坏降至最低。
我正在使用 pam_limits
并且 /etc/security/limits.conf
文件是
1000:1128 hard nproc 40
1000:1128 soft nproc 40
这意味着 ID 在 [1000..1128] 范围内的任何用户最多可以拥有 40 个进程。如果我 运行 forkbomb in shell by user with such id.
这工作正常
但是当我 运行 在 docker 容器内叉炸弹时,这些限制没有被应用,所以当我 运行 命令
# docker run -u 1000 ubuntu bash -c ":() { : | : & }; :; while [[ true ]]; do sleep 1; done"
我有尽可能多的进程,所有这些进程都属于id=1000的用户。
怎么了?我该如何解决?
与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个进程。希望这对您有所帮助!
当运行一个容器时,有一个选项可以限制pid的数量:
--pids-limit
: Tune container pids limit (set -1 for unlimited)
命令为:
docker container run --pids-limit 100 your-image
参考:https://docs.docker.com/engine/reference/commandline/run/#options
我正在尝试将 docker 容器内的叉形炸弹造成的损坏降至最低。
我正在使用 pam_limits
并且 /etc/security/limits.conf
文件是
1000:1128 hard nproc 40
1000:1128 soft nproc 40
这意味着 ID 在 [1000..1128] 范围内的任何用户最多可以拥有 40 个进程。如果我 运行 forkbomb in shell by user with such id.
这工作正常但是当我 运行 在 docker 容器内叉炸弹时,这些限制没有被应用,所以当我 运行 命令
# docker run -u 1000 ubuntu bash -c ":() { : | : & }; :; while [[ true ]]; do sleep 1; done"
我有尽可能多的进程,所有这些进程都属于id=1000的用户。
怎么了?我该如何解决?
与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个进程。希望这对您有所帮助!
当运行一个容器时,有一个选项可以限制pid的数量:
--pids-limit
: Tune container pids limit (set -1 for unlimited)
命令为:
docker container run --pids-limit 100 your-image
参考:https://docs.docker.com/engine/reference/commandline/run/#options