gpt4 book ai didi

python - 容器的 Docker 超时?

转载 作者:IT老高 更新时间:2023-10-28 12:37:41 27 4
gpt4 key购买 nike

对于我在大学的论文,我正在开发一个编码排行榜系统,用户可以通过临时 docker 容器编译/运行不受信任的代码。到目前为止,系统似乎运行良好,但我面临的一个问题是,当提交无限循环的代码时,例如:

while True:
print "infinite loop"

系统出了问题。问题是,当我创建一个新的 docker 容器时,Python 解释器会阻止 docker 杀死子容器,因为数据仍在打印到 STDOUT(永远)。这导致了 docker 耗尽所有可用系统资源直到使用系统的机器完全死机的巨大漏洞(如下图所示):

enter image description here

所以我的问题是,有没有比我当前的方法更好的方法来设置 docker 容器的超时时间,它实际上会杀死 docker 容器并使我的系统安全(代码最初取自 here )?

#!/bin/bash
set -e

to=$1
shift

cont=$(docker run --rm "$@")
code=$(timeout "$to" docker wait "$cont" || true)
docker kill $cont &> /dev/null
echo -n 'status: '
if [ -z "$code" ]; then
echo timeout
else
echo exited: $code
fi

echo output:
# pipe to sed simply for pretty nice indentation
docker logs $cont | sed 's/^/\t/'

docker rm $cont &> /dev/null

编辑:我的应用程序中的默认超时时间(传递给 $to 变量)是“10s”/10 秒。


我尝试过直接向 python 源代码添加计时器和 sys.exit(),但这并不是一个真正可行的选择,因为它看起来相当不安全,因为用户可以提交代码阻止它执行,这意味着问题仍然存在。哦,被困在论文上的乐趣……:(

最佳答案

您可以在最大 CPU 时间上使用 ulimit 设置容器,这将终止循环进程。但是,如果恶意用户是容器内的根用户,他们可以绕过这个问题。

还有另一个 S.O.问题“Setting absolute limits on CPU for Docker containers”描述了如何限制容器的 CPU 消耗。这样可以减少恶意用户的影响。

不过,我同意 Abdullah 的观点,你应该能够docker kill 逃离你的主管。

关于python - 容器的 Docker 超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28933925/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com