为 Code Runner 新增 Go 和 Rust 两种编译型语言,沿用现有 base 镜像分层结构。 Go: - run_cmd 直接用 go run(单条命令,内部编译+运行) - 镜像把 GOCACHE/GOTMPDIR/GOPATH 重定向到 /tmp tmpfs (只读根文件系统下 /Users/issuser/.cache 不可写) - default_limits: 1 核 / 256MB / 10s(编译冷启动比解释型慢) Rust: - rustc 编译 + 运行是两步,但 docker.rs 注入脚本用 exec 执行 run_cmd, exec 替换 shell 进程后 'A && B' 后半段不执行, 因此镜像内置 /usr/local/bin/run-rust.sh wrapper 封装两步 - default_limits: 1 核 / 512MB / 15s(rustc 内存大、编译慢) 新增镜像与白名单后,默认 CODE_RUNNER_LANGUAGES=python,node,go,rust。
33 lines
1.2 KiB
Bash
Executable File
33 lines
1.2 KiB
Bash
Executable File
#!/bin/sh
|
||
# 构建代码运行器所需的沙箱镜像:base → python / node / go / rust。
|
||
#
|
||
# 依赖:本机已安装 docker。构建顺序固定(python/node/go/rust 均为 FROM base)。
|
||
# 镜像 tag 与 src/api/code_runner/languages.rs 的注册项严格对应:
|
||
# yggdrasil-runner-base:latest
|
||
# yggdrasil-runner-python:latest
|
||
# yggdrasil-runner-node:latest
|
||
# yggdrasil-runner-go:latest
|
||
# yggdrasil-runner-rust:latest
|
||
set -e
|
||
|
||
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
|
||
|
||
echo "==> Building yggdrasil-runner-base:latest"
|
||
docker build -t yggdrasil-runner-base:latest "$SCRIPT_DIR/runner-base"
|
||
|
||
echo "==> Building yggdrasil-runner-python:latest"
|
||
docker build -t yggdrasil-runner-python:latest "$SCRIPT_DIR/runner-python"
|
||
|
||
echo "==> Building yggdrasil-runner-node:latest"
|
||
docker build -t yggdrasil-runner-node:latest "$SCRIPT_DIR/runner-node"
|
||
|
||
echo "==> Building yggdrasil-runner-go:latest"
|
||
docker build -t yggdrasil-runner-go:latest "$SCRIPT_DIR/runner-go"
|
||
|
||
echo "==> Building yggdrasil-runner-rust:latest"
|
||
docker build -t yggdrasil-runner-rust:latest "$SCRIPT_DIR/runner-rust"
|
||
|
||
echo "==> Done. Images:"
|
||
docker images --filter "reference=yggdrasil-runner-*" \
|
||
--format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
|