我试图在我的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),考虑到您同时拥有timeout
和python3
,该限制太低了。
run.sh
,我需要超过100 Kb。这个值取决于你的机器的操作系统,它的当前状态,你正在使用的python版本(我猜),以及其他变量。