trampgeek/jobeinabox!Docker Stars !Docker Pulls !Docker Automated !Docker Build
Moodle CodeRunner题目类型插件需要Jobe服务器来运行学生提交的作业。JobeInABox是一个Docker镜像,提供基础Jobe服务器,支持运行所有标准语言。有关Jobe服务器的完整信息,请参阅Jobe完整文档。
注意:出于安全和性能考虑,强烈建议即使在容器中运行Jobe,也应在专用独立服务器上部署。
有多种方式构建和运行JobeInABox容器,例如:
生产环境中,应使用本地时区构建自己的镜像。以下示例使用Docker:
从Github拉取此仓库,进入jobeinabox目录,执行以下格式的命令:
bashsudo docker build . -t my/jobeinabox --build-arg TZ="Europe/Amsterdam"
然后使用以下命令运行新构建的镜像:
bashsudo docker run -d -p 4000:80 --name jobe my/jobeinabox
这将在4000端口启动Jobe服务器,可本地测试并供Moodle使用,详见下文“使用JobeInABox”部分。
要运行预构建的Docker Hub镜像,只需执行:
bashsudo docker run -d -p 4000:80 --name jobe trampgeek/jobeinabox:latest
这将在4000端口启动Jobe服务器,可本地测试并供Moodle使用,详见下文“使用JobeInABox”部分。
默认情况下,Jobe最多同时运行8个作业。这通常适用于8核系统,但如果有更多核心,可能需要提高此数量。操作步骤如下:
通过以下命令在容器中执行shell:
bashdocker exec -it jobe bash
然后:
bashnano /var/www/html/jobe/app/Config/Jobe.php
找到以下行:
phppublic int $jobe_max_users = 8;
将值从8更改为机器的核心数,或如果主要运行I/O密集型作业,可设置更高值。
然后在容器内重新安装Jobe:
bashcd /var/www/html/jobe ./install --purge
可使用以下命令检查容器性能:
bashdocker exec -it jobe /var/www/html/jobe/testsubmit.py --perf
可通过--secret选项在镜像构建时提供API密钥。
密钥可存储在单独文件中,格式如下:
'c***-2289-4b76-ae29-bcea34997256' => 0, 'de7970e6-0466-4ce2-a6a4-c1a51363bd03' => 90
有关API密钥的更多信息,请参阅Jobe文档。
以下命令会将jobeinabox目录中名为api_keys的文件中的密钥自动添加到/var/www/html/jobe/app/Config/Jobe.php,并将$require_api_keys选项设置为true:
bashpodman build . -t my/jobeinabox --secret id=api_keys,src=api_keys
如果未提供API密钥,配置保持不变。
通过上述任一方法启动JobeInABox容器后,可通过访问以下URL检查其运行状态:
http://[运行Docker的主机]:4000/jobe/index.php/restapi/languages
应返回JSON格式的支持语言列表:
json[["c","7.3.0"],["cpp","7.3.0"],["java","10.0.2"],["nodejs","8.10.0"],["octave","4.2.2"],["pascal","3.0.4"],["php","7.2.7"],["python3","3.6.5"]]
要在容器内运行测试套件,使用:
bashsudo docker exec -t jobe /usr/bin/python3 /var/www/html/jobe/testsubmit.py
要将Moodle/CodeRunner插件配置为使用此Docker化Jobe服务器,在CodeRunner管理设置(站点管理 > 插件 > 题目类型 > CodeRunner)中,将Jobe服务器字段设置为:
[运行Docker的主机]:4000
不要以[***]
停止运行中的服务器:
bashsudo docker stop jobe
删除服务器容器:
bashsudo docker rm jobe
检查残留容器:
bashsudo docker ps -a
尽管运行Jobe的容器本身应是安全的,但容器网络目前桥接到主机网络。这意味着可从任何能访问主机的位置访问Jobe,且Jobe可访问主机能访问的任何URI。生产环境中必须对主机进行防火墙配置。
定期重建容器,确保运行最新的Jobe版本和安全更新。
2024年10月18日:
现在可使用Docker的“--secret”功能在构建时指定API密钥配置(感谢@theLogicJB)。
修复了关于更改Jobe服务器数量的文档错误。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像服务
在 Docker Desktop 配置镜像
Docker Compose 项目配置
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
MacOS OrbStack 容器配置
在宝塔面板一键配置镜像
Synology 群晖 NAS 配置
飞牛 fnOS 系统配置镜像
极空间 NAS 系统配置服务
爱快 iKuai 路由系统配置
绿联 NAS 系统配置镜像
QNAP 威联通 NAS 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
免费版仅支持 Docker Hub 访问,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等;免费版仅支持 docker.io。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
来自真实用户的反馈,见证轩辕镜像的优质服务