用 Docker 四步跑起 Judge0 在线代码执行沙箱:从 API 调用到生产配置
用 Docker 四步跑起 Judge0 在线代码执行沙箱从 API 调用到生产配置【免费下载链接】judge0Robust, fast, scalable, and sandboxed open-source online code execution system for humans and AI.项目地址: https://gitcode.com/GitHub_Trending/ju/judge0如果你在做在线判题、编程面试工具或 AI 编程助手迟早会碰到同一个问题怎样安全地运行别人写来的代码。Judge0 是一个开源的在线代码执行系统2016 年 8 月立项采用 GPL v3 许可把程序的编译与执行关进沙箱一种隔离环境程序跑在里面碰不到宿主机对外只暴露一个 HTTP JSON API官方口径支持 90 多种语言。这篇文章按判断需求 → 本地跑通 → 调用 API → 理解隔离 → 上生产的顺序走一遍。 什么需求下该自建代码执行沙箱判题与教学平台自动判分做 LeetCode 式的练习平台时每道题都需要运行学生代码 → 对比标准输出 → 给出状态这一步。自己用 shell 直接跑学生代码一次构造脚本就能拖垮服务器把执行环节外包给 Judge0你只需要保存题目和期望输出判分逻辑由执行结果驱动。面试工具实时验证候选人代码招聘平台让候选人在浏览器里写代码、当场看运行结果。对候选人而言这是秒级反馈对平台而言这是在不可信环境中跑任意代码——这正是 Judge0 的设计目标执行不可信代码而不危及主机。AI 助手运行模型生成的代码大模型生成的代码在交给用户之前通常要跑一遍验证正确性。Judge0 支持多文件项目、附加文件和自定义编译参数AI 编程工具链里普遍把它当作代码执行后端后续新增语言支持也不影响调用方。当前仓库 CE 分支的活跃语言清单定义在 db/languages/active.rb共 47 种语言每种语言用一段 Ruby 结构描述源文件后缀 编译命令 运行命令需要扩展时改这一个文件即可。 用 Docker Compose 四步跑起 Judge0第一步克隆仓库仓库根目录就是部署所需的全部材料docker-compose.yml描述四个容器judge0.conf是唯一的配置文件。第二步补齐必填密码打开 judge0.conf必须设置REDIS_PASSWORD和POSTGRES_PASSWORD注释里明确写了 MUST BE SET其余项都有默认值。默认值里值得先知道几个CPU_TIME_LIMIT5默认单次运行 CPU 时间上限 5 秒、MAX_QUEUE_SIZE100队列最多排队 100 个提交。第三步一条命令启动四个容器git clone https://gitcode.com/GitHub_Trending/ju/judge0 cd judge0 docker compose up -dDocker Compose 是一个按 YAML 描述同时拉起多个容器的工具。这里会启动 4 个服务API 服务器映射端口 2358、执行 worker、Postgres 16.2存提交记录、Redis 7.2存任务队列。server 和 worker 都设置了privileged: true因为沙箱隔离需要内核级权限部署环境必须允许特权容器。第四步确认服务就绪请求GET /health应返回正常状态再请求GET /workers返回每个队列的size排队数、available、idle、working等字段能看到 worker 已挂上来。 提交一段代码并读取执行结果waittrue 同步等待与异步轮询的区别创建提交时默认行为是POST 成功后返回一个 token之后用GET /submissions/{token}查询状态轮询即每隔几秒问一次结果。加上waittrue查询参数则本次请求直接阻塞到执行完成并返回完整结果本地调试更省事。但官方文档明确提示waittrue扩展性差、不建议生产使用且该功能由ENABLE_WAIT_RESULT开关控制默认开启。批量提交一次带上 20 个任务一次判 20 道题、一次跑 10 组测试用例时用POST /submissions/batch可以在一个请求里提交多个提交返回一组 token。单批上限由MAX_SUBMISSION_BATCH_SIZE控制默认 20能显著减少网络往返开销。14 种状态码对应什么结果执行结果里的status.id从 1 到 141 排队中、2 处理中3 为 Accepted4 为 Wrong Answer5 为超时6 为编译错误7 到 12 是各类运行时错误段错误、文件大小超限、浮点异常等13 是内部错误。完整定义见 app/enumerations/status.rb。所有请求参数、字段和错误响应的细节以 docs/api/docs.md 为准。最小可运行的调用示例language_id 109 为 Python可在语言清单中查其他语言curl -H Content-Type: application/json \ -d {language_id: 109, source_code: print(input()), stdin: Alice} \ http://localhost:2358/submissions?waittrue返回体包含stdout、stderr、time、memory和status判分平台通常只关心status.id和stdout。️ 沙箱对不可信代码设了哪些限制⏱️ 进程与资源CPU、内存、文件都有上限Judge0 的隔离层是 isolateIOI 出品的命令行沙箱工具。每次提交都在 isolate 内编译和运行默认 CPU 时间 5 秒用户自定义最高 15 秒墙钟时间 10 秒防睡死的程序地址空间 128000KB约 125MB上限可配到 512MB进程/线程数不超过 60 个程序可写文件不超过 1MB。还可以用NUMBER_OF_RUNS让程序跑多次取时间和内存的平均值最高 20 次。默认断网按次放行ENABLE_NETWORK默认为 false程序默认无法发起网络调用调用方可以按提交传enable_network单独放行前提是服务端ALLOW_ENABLE_NETWORK为 true。对外网开放执行环境前这条默认值值得保留。队列满了就拒绝而不是堆积worker 以固定数量并行消费队列默认COUNT2×nproc。当排队数达到MAX_QUEUE_SIZE默认 100新的创建请求直接返回 503queue is full调用方需要自行决定重试或提示用户服务端不会无限堆积任务拖慢整体。⚙️ 上生产前必须改的 judge0.conf给 API 加认证和授权默认情况下接口完全敞开AUTHN_TOKEN为空即关闭认证。生产环境应设置AUTHN_HEADERAUTHN_TOKEN每个请求都要带这对 token删除提交等受保护接口还需额外配置AUTHZ_HEADERAUTHZ_TOKEN。回调webhook默认开启执行完成后可推送到你指定的callback_url重试 3 次。用白名单限制访问来源ALLOW_ORIGIN/DISALLOW_ORIGIN控制浏览器跨域来源ALLOW_IP/DISALLOW_IP控制请求 IP均为空格分隔的列表留空表示不限制。自建服务挂在内网或代理后面时把这两组都收紧。监控、缓存与维护模式把GET /workers接入你的监控队列size持续偏高、failed非零时告警。注意遥测默认开启JUDGE0_TELEMETRY_ENABLE不想要就显式设为 false提交结果默认缓存 1 秒SUBMISSION_CACHE_DURATION相同输入短时间内的重复提交直接命中缓存。计划停机维护时打开MAINTENANCE_MODE客户端的创建请求会收到你自定义的维护提示。Judge0 在线代码执行沙箱品牌壁纸接下来往下挖的入口接口字段与错误码在 docs/api/docs.md提交请求的处理逻辑在 app/controllers/submissions_controller.rb真正进入沙箱执行的是 app/jobs/isolate_job.rb。【免费下载链接】judge0Robust, fast, scalable, and sandboxed open-source online code execution system for humans and AI.项目地址: https://gitcode.com/GitHub_Trending/ju/judge0创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

AI智能体技能进化:构建决策历史驱动的持续学习系统

AI智能体技能进化:构建决策历史驱动的持续学习系统

1. 项目概述:当AI智能体需要“长记性”最近在折腾AI智能体(Agent)项目时,我遇到了一个几乎所有开发者都会头疼的经典问题:“健忘症”。简单来说,就是智能体在执行一系列任务后,无法有效记住自己…

2026/8/24 3:21:08 阅读更多 →
Crayon 怎么串进 TensorBoard:跨语言实验监控上手记

Crayon 怎么串进 TensorBoard:跨语言实验监控上手记

Crayon 怎么串进 TensorBoard:跨语言实验监控上手记 【免费下载链接】crayon A language-agnostic interface to TensorBoard 项目地址: https://gitcode.com/gh_mirrors/cr/crayon 训练脚本不是用 Python 写的,TensorBoard 的日志格式就把你挡在…

2026/8/24 3:21:08 阅读更多 →
Playwright CLI:打开浏览器、点击、截图的无代码网页自动化命令行

Playwright CLI:打开浏览器、点击、截图的无代码网页自动化命令行

Playwright CLI:打开浏览器、点击、截图的无代码网页自动化命令行 【免费下载链接】playwright-cli CLI for common Playwright actions. Record and generate Playwright code, inspect selectors and take screenshots. 项目地址: https://gitcode.com/GitHub_T…

2026/8/24 3:21:08 阅读更多 →

最新新闻

部分可观测多智能体协同:CRAFT框架下的算法设计与工程实践

部分可观测多智能体协同:CRAFT框架下的算法设计与工程实践

1. 项目概述:当智能体“看不见”全局时,如何协同?在现实世界里,无论是自动驾驶车队、仓库机器人集群,还是分布式传感器网络,一个核心的挑战是:没有一个个体能掌握全局的、完美的信息。每个智能体…

2026/8/24 9:54:20 阅读更多 →
从经验到科学:数学建模如何优化生鲜供应链的采购与库存决策

从经验到科学:数学建模如何优化生鲜供应链的采购与库存决策

1. 从“买菜难”到“建模难”:一个被低估的供应链优化问题最近和几个做社区生鲜配送的朋友聊天,他们都在抱怨同一个问题:每天凌晨去批发市场进货,看着琳琅满目的蔬菜,心里却一点底都没有。进多了,当天卖不完…

2026/8/24 9:54:20 阅读更多 →
为什么登录脚本是域内渗透的高危暗面:ScriptSentry检测的8类威胁全景解读

为什么登录脚本是域内渗透的高危暗面:ScriptSentry检测的8类威胁全景解读

为什么登录脚本是域内渗透的高危暗面:ScriptSentry检测的8类威胁全景解读 【免费下载链接】ScriptSentry ScriptSentry finds misconfigured and dangerous logon scripts. 项目地址: https://gitcode.com/gh_mirrors/sc/ScriptSentry 登录脚本是域内渗透的高…

2026/8/24 9:54:19 阅读更多 →
gc-viz进阶玩法:用step-by-step.html逐帧回放GC动画,调试体验比GIF强10倍

gc-viz进阶玩法:用step-by-step.html逐帧回放GC动画,调试体验比GIF强10倍

gc-viz进阶玩法:用step-by-step.html逐帧回放GC动画,调试体验比GIF强10倍 【免费下载链接】gc-viz Animated visualizations of several garbage collection algorithms 项目地址: https://gitcode.com/gh_mirrors/gc/gc-viz gc-viz 是一个把垃圾…

2026/8/24 9:54:19 阅读更多 →
基于Github Action与Shell脚本的网易云游戏自动签到实践

基于Github Action与Shell脚本的网易云游戏自动签到实践

1. 项目概述:当“白嫖”成为一种技术活 “白嫖”这个词,在互联网语境里早已脱离了最初的贬义,演变成一种略带自嘲和智慧的“资源最大化利用”艺术。尤其是在各种互联网平台推出的签到、做任务领奖励的运营体系下,手动坚持成了一种…

2026/8/24 9:54:19 阅读更多 →
Countly iOS SDK 推送通知跟踪教程:Token注册、权限请求与点击行为上报一步到位

Countly iOS SDK 推送通知跟踪教程:Token注册、权限请求与点击行为上报一步到位

Countly iOS SDK 推送通知跟踪教程:Token注册、权限请求与点击行为上报一步到位 【免费下载链接】countly-sdk-ios Countly Digital Analytics iOS SDK with macOS, watchOS and tvOS support. 项目地址: https://gitcode.com/gh_mirrors/co/countly-sdk-ios …

2026/8/24 9:53:19 阅读更多 →

日新闻

前端内容安全与依赖审计实践

前端内容安全与依赖审计实践

前端内容安全与依赖审计实践 前端安全依赖分层防护。没有任何单一配置能替代输出编码、权限校验和依赖更新。 把不可信内容当作数据 默认使用框架的转义能力;确需渲染 HTML 时,先在服务端或可信的客户端库中进行白名单过滤。避免把用户输入直接赋给 inne…

2026/8/24 1:08:15 阅读更多 →
Windows登录密码存储机制全解析:从哈希算法到安全加固实战

Windows登录密码存储机制全解析:从哈希算法到安全加固实战

1. 项目概述:Windows登录密码的“黑匣子”每次你按下CtrlAltDel,输入密码,然后看到那个熟悉的桌面,这背后发生了一系列复杂而精密的操作。作为一名长期与Windows系统打交道的从业者,我经常被问到:“我的密码…

2026/8/24 1:08:15 阅读更多 →
AI面试系统安全挑战与解决方案

AI面试系统安全挑战与解决方案

1. 项目概述:AI面试系统的安全挑战去年参与某跨国企业AI面试系统部署时,遇到一个典型案例:候选人在视频面试中无意提到竞争对手产品名称,系统竟自动将该信息关联到企业知识库并生成竞品分析报告。这个看似"智能"的功能&…

2026/8/24 1:08:15 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/24 0:06:02 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/24 0:20:20 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/24 0:14:11 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/23 18:47:06 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/23 12:10:44 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →