Docker linux在超过时间/内存限制时杀死进程脚本



我试图在我的docker容器中运行python代码。我已经设置了run.sh脚本,如下所示:

#!/usr/bin/env bash
ulimit -s 5
timeout --signal=SIGTERM 5 python3 main.py
exit $?

main.py:

def factorial(x):
"""This is a recursive function
to find the factorial of an integer"""
if x == 1:
return 1
else:
return (x * factorial(x-1))

num = 900
print("The factorial of", num, "is", factorial(num))

我运行我的图像,上面的脚本如下:

container = subprocess.run(["docker", "run", "mycontainertag"],capture_output=True)

尽管超出了时间和内存限制,但它并没有使用阶乘代码终止进程。

问题不在docker,而在ulimit

ulimit -s 5命令限制了同一shell中所有以下命令的堆栈跟踪,问题是5可能并不意味着您想的那样。您已经将堆栈限制设置为5 * 1024字节(5 Kb),考虑到您同时拥有timeoutpython3,该限制太低了。

例如,在我的机器中,仅仅为了运行run.sh,我需要超过100 Kb。这个值取决于你的机器的操作系统,它的当前状态,你正在使用的python版本(我猜),以及其他变量。

相关内容

  • 没有找到相关文章

最新更新