尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Judge0在线代码执行系统快速上手:如何用Docker部署90+语言沙箱搭建在线判题
Judge0在线代码执行系统快速上手如何用Docker部署90语言沙箱搭建在线判题【免费下载链接】judge0Robust, fast, scalable, and sandboxed open-source online code execution system for humans and AI.项目地址: https://gitcode.com/GitHub_Trending/ju/judge0当不可信的用户代码需要在你的生产环境里运行时编程学习平台、面试评测系统和 AI 代码校验都会遇到同一个问题。Judge0 是一个开源的在线代码执行系统它把用户代码放进 isolate 沙箱中编译与运行并通过 HTTP JSON API 返回输出、时间、内存等结构化执行结果。Judge0品牌图开源在线代码执行系统视觉形象项目速写一个运行了十年的代码执行引擎Judge0 的定位是给你一个开箱即用的在线代码执行系统让你把运行代码这件事外包给沙箱专心做产品逻辑。它由 Herman Zvonimir Došilović 创建采用 Rails API 层 Resque/Redis 异步队列 PostgreSQL 存储 ioi/isolate 沙箱的模块化架构官方文档中有一篇研究论文专门描述了这套设计。三个硬事实维度事实诞生时间2016 年 8 月持续维护至今语言支持官方宣称 90 种语言仓库语言定义文件中当前活跃 47 条、已归档 42 条维护状态当前版本 1.13.1见 DockerfileGPLv3 许可API 与队列分层社区有完整生产案例典型使用场景都围绕批量执行不可信代码竞赛判题、教学作业自动批改、AI Agent 执行模型生成的代码。⚡ 五分钟跑通第一次执行从提交到拿到结果最短路径只有四步克隆仓库、填两个密码、拉起容器、发一条请求。git clone https://gitcode.com/GitHub_Trending/ju/judge0编辑根目录的 judge0.conf至少补上REDIS_PASSWORD和POSTGRES_PASSWORD两者无默认值执行docker compose up -d等待 server 与 worker 就绪向http://localhost:2358/submissions发 POST 请求最小请求示例language_id 71 对应仓库语言表中的 Python 3.8.1curl -H Content-Type: application/json \ -d {language_id: 71, source_code: print(\hello, \ input()), stdin: Judge0} \ http://localhost:2358/submissions?waittruewaittrue会阻塞到执行完成并直接返回 stdout、status 等字段不加则只返回 token用GET /submissions/:token轮询。官方文档明确不建议在高并发下使用同步模式。执行链路拆解一次提交在沙箱里的完整旅程结论先说一次提交经历入队 → 隔离工作区 → 编译 → 运行 → 校验五个阶段全程由 app/jobs/isolate_job.rb 中的 IsolateJob 驱动沙箱本体是 isolate 命令行。链路细节API 层app/controllers/submissions_controller.rb校验参数、检查队列深度把 Submission 写入 PostgreSQL再投递到 Resque 队列worker 取出任务用isolate -b box_id --init创建独立沙箱工作区把源码、stdin 写入对应文件编译与运行各自生成一个 bash 脚本在沙箱内执行脚本中的 shell 危险字符$;| 等会被剥离结束后 IsolateJob 读取 isolate 产生的 metadata耗时、内存、退出码/信号对照expected_output判定状态最后清理沙箱并可回调 callback_url沙箱隔离至少由三层机制叠加进程与文件系统隔离每个提交使用独立 box 与工作目录HOME/tmp、PATH 收窄到系统目录-d /etc:noexec挂载时禁止执行运行后执行--cleanup销毁资源限制CPU 时间-t默认 5s含超时后额外宽限-x、墙钟时间-w默认 10s、内存-m默认 128MB、栈-k、进程/线程数-p默认 60、可写文件大小-f默认 1MB并支持 cgroups 做总量控制网络控制默认禁止网络仅当提交请求显式enable_networktrue且服务端配置允许时才追加--share-net自托管部署选项Docker Compose 是最短生产路径仓库内置的 docker-compose.yml 定义了四个服务server对外 API端口 2358、worker沙箱执行运行 scripts/workers、dbPostgreSQL 16.2、redis7.2.4开启密码。由于 isolate 依赖 cgroups 与 noexec 挂载server 和 worker 容器需要privileged: true部署时务必放在隔离网络里。因为 server 与 worker 都是无状态进程状态在 Redis 与 PostgreSQL 中扩容只需增加 worker 副本这也是社区将其部署到 Kubernetes 的前提按副本数水平扩展执行能力即可。开发环境可用 docker-compose.dev.yml 与 scripts/dev/ 下的辅助脚本。主配置文件是根目录的 judge0.conf关键项如下配置项默认值作用MAX_QUEUE_SIZE100队列上限超限时新提交返回 503COUNT2 × CPU 核数并行 worker 数决定执行吞吐CPU_TIME_LIMIT/MEMORY_LIMIT5s / 128MB程序级默认资源限制ENABLE_NETWORKfalse沙箱默认禁网总开关AUTHN_TOKEN空不鉴权设置后所有请求需携带鉴权头SUBMISSION_CACHE_DURATION1s结果查询的缓存窗口API 接入实战核心端点、状态码与错误处理核心端点定义在 config/routes.rb 中接入时只需要下表几个端点方法用途/submissionsPOST创建提交可选wait、base64_encoded、fields查询参数/submissions/:tokenGET / DELETE查询结果 / 删除记录删除需开启开关/submissions/batchPOST / GET批量提交与批量查询默认单批 ≤ 20/languages、/statusesGET语言表与状态表/statistics、/system_infoGET用量统计与运行参数/workersGET健康检查提交参数支持逐任务覆盖限制cpu_time_limit、memory_limit、wall_time_limit、number_of_runs多次运行取均值、compiler_options、command_line_arguments、additional_filesBase64 压缩包等。状态码枚举在 app/enumerations/status.rb共 14 个ID状态ID状态1In Queue8Runtime Error (SIGXFSZ)2Processing9Runtime Error (SIGFPE)3Accepted10Runtime Error (SIGABRT)4Wrong Answer11Runtime Error (NZEC)5Time Limit Exceeded12Runtime Error (Other)6Compilation Error13Internal Error7Runtime Error (SIGSEGV)14Exec Format Error常见报错422 表示参数校验失败如language_id不存在503 queue is full 表示队列已满返回cannot be converted to UTF-8错误时改用base64_encodedtrue请求。生产环境加固清单上线前逐项核对设置REDIS_PASSWORD与POSTGRES_PASSWORD不留空默认配置AUTHN_HEADER/AUTHN_TOKEN开启 API 鉴权管理端点再叠加AUTHZ_TOKEN用ALLOW_ORIGIN/ALLOW_IP收紧来源替代默认的全放行按吞吐调整COUNT与MAX_QUEUE_SIZE并为MAX_CPU_TIME_LIMIT、MAX_MEMORY_LIMIT等自定义上限设合理天花板保持ENABLE_NETWORKfalse仅在业务需要时通过ALLOW_ENABLE_NETWORK放开用户侧开关将特权容器放入隔离网络/VPC避免沙箱逃逸影响宿主机监控/workers健康、队列深度、状态分布TLE/CE 占比在网关层做限流兜底发布时切换MAINTENANCE_MODE阻止新提交 避坑指南五个常见现象与修复方式输出乱码或 400 报 UTF-8 转换错误。原因程序输出了非 UTF-8 字节。对策请求与查询统一带base64_encodedtrue客户端解码后再展示。高并发下出现 503 queue is full。原因MAX_QUEUE_SIZE偏小或 worker 处理慢新请求被直接拒绝。对策增加 worker 副本、调大队列上限并对 503 做指数退避重试。同步waittrue在高峰期超时。原因同步模式会让请求线程挂起等待整个执行周期官方文档明确说它扩展性差。对策改为异步提交 callback_url回调或低频轮询 token。编译通过但运行得到 Runtime Error (NZEC)。原因编译产物缺失或运行命令找不到可执行文件退出码为无正常退出。对策检查该语言在 db/languages/active.rb 中的compile_cmd/run_cmd定义查看结果的exit_signal与message字段定位。设置了时间上限程序仍长时间挂起。原因只约束了 CPU 时间而程序在等待 I/O 或 sleep 时不消耗 CPU。对策把WALL_TIME_LIMIT设为更高的兜底值默认 10s官方建议显著高于 CPU 上限。完整端点说明见仓库内 docs/api/docs.md执行与状态判定逻辑可从 app/ 目录逐层阅读。Judge0 适合在线判题、AI 代码校验、教学评测这类批量执行不可信代码的场景如果你的需求是长时间交互式会话或高内存常驻进程则更适合专用容器服务而非本系统的沙箱模型。【免费下载链接】judge0Robust, fast, scalable, and sandboxed open-source online code execution system for humans and AI.项目地址: https://gitcode.com/GitHub_Trending/ju/judge0创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

Vue与Node.js构建智能招聘平台的技术实践

Vue与Node.js构建智能招聘平台的技术实践

1. 项目概述:基于Vue与Node.js的智能招聘平台最近在技术社区看到一个挺有意思的开源项目——用Vue和Node.js搭建的协同过滤招聘平台。这种将推荐算法与传统招聘业务结合的方案,正好解决了求职者海投简历、HR筛选效率低下的行业痛点。作为前后端分离的典型…

📅 2026/10/19 18:09:59
Android OAID获取实战:从原理到集成与避坑指南

Android OAID获取实战:从原理到集成与避坑指南

1. 项目概述:为什么我们需要关注OAID?在Android应用开发与广告归因领域,设备标识符一直是个既关键又敏感的话题。几年前,开发者们可以相对轻松地获取到IMEI、Android ID等“永久”标识符,用于追踪用户设备、分析广告投…

📅 2026/11/1 18:22:50
LLM智能体部署后约束规避与装死行为:原理剖析与Python实战解决方案

LLM智能体部署后约束规避与装死行为:原理剖析与Python实战解决方案

1. 项目概述:当你的AI代理开始“装死”最近在折腾大语言模型(LLM)驱动的智能体(Agent)时,我遇到了一个既诡异又普遍的现象:你精心设计的Agent,在部署上线后,有时会像某些…

📅 2026/11/8 5:10:58
MORE NEWS

更多资讯

📰

电工证报考必须培训吗 电子证书怎么拿一清二楚

电工证报考必须培训吗 电子证书怎么拿一清二楚 不知道去哪报名怕被中介坑?你不是一个人。很多人在报考电工证时,都会被“是否必须培训”这个问题绕得云里雾里,生怕花了钱还拿不到证,甚至被坑了钱连个培训记录都没有。其实,答案并不复杂,关键是要找对地…

📰

电气测试需要电工证的真实经历:实操考试心里没底怕挂科怎么办

电气测试需要电工证的真实经历:实操考试心里没底怕挂科怎么办 实操考试心里没底怕挂科,这是很多准备报考电工证的朋友最真实的心声。我认识的一个朋友,干了三年电气测试,却因为没有电工证差点被项目方拒之门外。他的真实经历让我明白,…

📰

农民水电工证含金量高吗?工地太忙根本没时间复习考试怎么办?

农民水电工证含金量高吗?工地太忙根本没时间复习考试怎么办? 工地太忙根本没时间复习考试,这几乎是每个农民工朋友在考取农民水电工证时面临的最大难题。尤其在建筑行业,时间就是金钱,很多人为了赶工期,连吃饭都顾不上,更别说花时间准备考试了。可农民…

📰

新乡市政公用工程从业者怎么暗访特种作业操作证官方报名入口

新乡市政公用工程从业者怎么暗访特种作业操作证官方报名入口 你是不是正为特种作业操作证的报名渠道发愁?担心去错了地方被中介忽悠,还花冤枉钱?别急,这篇文章是给你量身定制的,讲清楚怎么通过【暗访特种作业操作证】这个方式,找到真正靠谱的…

📰

弱电电工证可以考吗通过率揭秘:学历不高也能上手

弱电电工证可以考吗通过率揭秘:学历不高也能上手 你是不是也担心学历不高,连报名都报不上?别慌,弱电电工证可以考吗,这个问题其实很多人都在问,关键是你得知道怎么操作。先说结论: 弱电电工证是可以考的 ,而且通过率也比你想象的要高。…

📰

不说再见电工证怎么考?真实经历告诉你怎么避坑

不说再见电工证怎么考?真实经历告诉你怎么避坑 证书过期了不知道怎么复审延期?这事儿我见过太多人踩坑,尤其是像你这样在驻马店从事公路工程的电工朋友,很多人因为不了解流程,导致证过期了才知道补救已经来不及。今天我就结合真实经历,把【不说再见电工…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬