【问题标题】:Limit number of processes started inside docker container限制在 docker 容器内启动的进程数
【发布时间】:2015-01-30 14:22:57
【问题描述】:

我正在尝试将 docker 集装箱内的叉形炸弹造成的损坏降至最低。

我正在使用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 的用户。

怎么了?我该如何解决?

【问题讨论】:

标签: docker pam


【解决方案1】:

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

--pids-limit: 调整容器 pid 限制(设置 -1 表示无限制)

命令是:

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

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

【讨论】:

    【解决方案2】:

    与 PAM 无关,但您可以使用“docker create”命令限制 Docker 容器,例如 Enduro/X 项目使用一些 IPC 队列限制,但同样您可以设置一些其他 ulimit 设置,如 number进程数为“-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个进程。希望这会有所帮助!

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-28
    • 2018-10-08
    • 2017-09-13
    • 2019-07-23
    • 2020-12-21
    • 1970-01-01
    • 2016-01-31
    相关资源
    最近更新 更多