通过Ajax与Docker执行Sandbox命令

我正在寻找在这个问题上的帮助,如果我想沙箱的网站上input命令的执行我有什么select? 我想创build一个编程语言的在线解释器。

我一直在看docker,我将如何使用它? 这是最好的select吗?

codecube.io这样做。 它是开源的: https : //github.com/hmarr/codecube

作者写下了他的理由和过程 。 以下是系统的工作原理:

  • 用户在网站上的某个框中键入一些代码,并指定代码的写入语言
  • 他们点击“运行”,代码被发送到服务器
  • 服务器将代码写入一个临时目录,并引导一个装载临时目录的docker容器
  • 容器在挂载的目录中运行代码(它是如何根据代码的语言而变化的)
  • 服务器尾部运行的容器的日志,并通过服务器发送的事件推送到浏览器
  • 代码完成运行(如果运行时间过长,则会被终止),并且服务器将销毁该容器

Docker容器的入口点是entrypoint.sh ,它在容器内运行:

prog=$1 <...create user and set permissions...> sudo -u codecube /bin/bash /run-code.sh $prog 

然后run-code.sh检查扩展并运行相关的编译器或解释器:

 extension="${prog##*.}" case "$extension" in "c") gcc $prog && ./a.out ;; "go") go run $prog ;; <...cut...> 

从Web接受代码示例并编排Docker容器的服务器是用Go编写的。 事实certificate,这是一个非常好的select,因为很多服务器都依赖于并发(拖拽日志到浏览器,等待容器死掉,所以清理工作可能会发生),Go让人愉快地变得简单。

作者还详细介绍了他是如何实现资源限制,隔离和安全的想法。