# ============================== # 乾坤 · 魂镜安全沙箱镜像(Sandbox Engine):Rust + axum,多阶段构建。 # 构建:rust:bookworm(含 toolchain);运行:debian:bookworm-slim(需 glibc)。 # 监听 8090,健康检查走 GET /healthz。 # 隔离在进程组 + 超时 + 资源限制层面;如需更强隔离(seccomp / cgroup / read-only 根),见 sandbox/README.md「后续加固」。 # ============================== # ---------- 构建阶段 ---------- FROM rust:1.83-bookworm AS builder WORKDIR /build # 国内 crates 镜像(按网络情况保留或删除该 RUN) RUN printf '[source.crates-io]\nreplace-with = "ustc"\n[source.ustc]\nregistry = "sparse+https://mirrors.ustc.edu.cn/crates.io-index"\n' \ > /usr/local/cargo/config.toml # 先复制依赖清单以最大化层缓存(dummy src 触发依赖编译),再覆盖真实源码 COPY sandbox/Cargo.toml ./ RUN mkdir -p src && echo 'fn main() {}' > src/main.rs && cargo build --release || true # 复制真实源码并构建(sandbox/ 整体拷入;根 .dockerignore 已忽略 target/) COPY sandbox/ ./ RUN touch src/main.rs && cargo build --release # ---------- 运行阶段 ---------- FROM debian:bookworm-slim ENV TZ=Asia/Shanghai \ RUST_LOG=info \ SANDBOX_HOST=0.0.0.0 \ SANDBOX_PORT=8090 \ SANDBOX_BASE_WORKDIR=/app/sandbox-work \ SANDBOX_LOG_DIR=/app/logs RUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates tzdata curl \ && rm -rf /var/lib/apt/lists/* \ && ln -snf "/usr/share/zoneinfo/$TZ" /etc/localtime && echo "$TZ" > /etc/timezone WORKDIR /app RUN mkdir -p /app/sandbox-work /app/logs COPY --from=builder /build/target/release/hunjing-sandbox /usr/local/bin/hunjing-sandbox EXPOSE 8090 HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD curl -fsS "http://127.0.0.1:${SANDBOX_PORT}/healthz" || exit 1 CMD ["hunjing-sandbox"]