# Bun 运行沙箱镜像。 # 与 src/api/code_runner/languages.rs 的 bun 注册项对齐: # image: yggdrasil-runner-bun:latest # run_cmd: bun run /code/main.ts # # bun 在 Alpine 3.18 的官方仓库里没有,用 bun.sh 官方安装脚本(多架构、 # 自动检测 /etc/alpine-release 选 musl 变体)。bun 的 musl 二进制是 C++ 写的, # 运行时依赖 libstdc++ + libgcc(musl 只带 libc,不带 C++ 运行时),必须保留。 # 安装期另需 unzip + bash + curl;安装后卸载 unzip/curl 减小镜像。 FROM yggdrasil-runner-base:latest # libstdc++ / libgcc 是 bun 运行时依赖,不能删;curl/unzip/bash 仅供安装期。 # BUN_INSTALL 用 export 对管道两侧生效——「VAR=x cmd | bash」只给左侧设变量, # bash 侧读不到会 fallback 到 $HOME/.bun。指定到 /opt/bun 避免依赖 $HOME # (runner 用户 $HOME 可能不可写或不存在)。 RUN apk add --no-cache curl unzip bash libstdc++ libgcc \ && export BUN_INSTALL=/opt/bun \ && curl -fsSL https://bun.sh/install | bash \ && ln -s /opt/bun/bin/bun /usr/local/bin/bun \ && apk del curl unzip \ && bun --version COPY runner.toml /runner.toml USER runner