我目前正在尝试使用Docker开发沙盒。 Docker通过一个正在运行的守护进程生成进程,并且我在limits.conf文件中设置限制时遇到了很多麻烦,以至于它们都应用于守护进程。具体来说,我正在运行一个forkbomb,以便守护进程产生所有新进程的进程。我对发出此调用的用户施加的nproc限制似乎没有得到应用,而我对我的生活无法弄清楚如何使其工作。我很安静,它会像在/etc/pam.d/中添加正确的文件一样简单,但我不确定。
答案 0 :(得分:2)
PAM限制仅适用于与PAM一起玩的流程。默认情况下,当您在容器中启动shell时,它与PAM没有任何关系,并且通过PAM设置限制将不起作用。
以下是其他一些实现目标的方法!
您可以启动一个小的包装器脚本,而不是立即启动您的过程,该脚本将在执行您的过程之前执行相应的ulimit
调用。
如果您想要一个交互式shell,可以运行login -f <username>
(例如login -f root
);这将使用正常的登录过程在机器上自动登录(这应该通过正常的PAM机制)。
如果您希望所有容器都受到这些限制,您可以在系统上设置限制,然后使用这些下限重新启动Docker;容器由Docker创建,默认情况下,它们也将继承这些限制。