Docker 容器超时?

2024-02-28

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

while True:
   print "infinite loop"

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

所以我的问题是,有没有比我当前的方法更好的方法来在 docker 容器上设置超时杀死 docker 容器并确保我的系统安全(代码最初取自here https://github.com/docker/docker/issues/1905#issuecomment-24795551)?

#!/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 秒。


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


你可以设置你的容器ulimit最大 CPU 时间,这将终止循环进程。不过,如果恶意用户是容器内的 root 用户,他们就可以绕过这个问题。

还有另一个S.O.问题, ”为 Docker 容器设置 CPU 绝对限制 https://stackoverflow.com/q/26348816/1220269”,描述了如何限制容器的 CPU 消耗。这可以让您减少恶意用户的影响。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker 容器超时? 的相关文章

随机推荐