自托管Judge0 API查询提交详情时出现内部错误求助
解决Judge0自托管版本查询提交时的/box/main.c文件不存在错误
排查步骤与解决方案
- 检查Docker卷挂载配置
Judge0依赖本地卷存储提交的代码文件,确保你的docker-compose.yml中正确配置了/box/data和/box/tmp的卷映射:
services: judge0: image: judge0/judge0:latest volumes: - ./judge0_data:/box/data - ./judge0_tmp:/box/tmp # 其他配置(端口、环境变量等)
如果卷未正确挂载,容器重启后提交的文件会丢失,导致查询时找不到/box/main.c。
验证提交与查询的编码参数一致性
提交代码时的base64_encoded参数必须和查询时保持一致。比如提交时用了base64_encoded=true,查询时也需要设为true,否则会导致文件解析失败。同时检查提交请求中source_code字段是否正确传递,没有截断或编码错误。修复容器目录权限
Judge0容器需要对/box下的目录有读写权限,执行以下命令检查并修复:
# 查看容器内/box目录权限 docker exec -it <your-judge0-container-id> ls -ld /box /box/data /box/tmp # 如果权限不足,修改本地挂载目录权限 chmod -R 777 ./judge0_data ./judge0_tmp
也可以在docker-compose.yml中临时指定user: root测试(生产环境不建议,需调整为合适的权限)。
- 清理并重启Judge0服务
旧容器的缓存或损坏的卷数据可能导致问题,执行以下命令彻底清理后重启:
docker-compose down -v docker-compose up -d --build
-v参数会删除所有关联卷,确保重新创建干净的存储环境。
- 核对Judge0版本与配置兼容性
不同版本的Judge0可能有目录结构或配置参数变化,建议使用官方提供的最新docker-compose.yml配置,避免版本不匹配导致的文件路径错误。
内容的提问来源于stack exchange,提问作者Matteo
相关产品推荐
相关产品推荐

