容器接入 neu-box 沙盒的 runtime 侧。三个二进制:
| 二进制 | 干什么 |
|---|---|
neu-box-runtime |
runc wrapper,占 Docker default-runtime 的位置:给带 annotation 的容器注入 hook,其余 argv 原样转发给真 runc |
neu-box-hook |
OCI hook:在容器 ENTRYPOINT 之前把它登记到 Worker。登记不上容器就起不来(fail-closed) |
neu-box-config |
生成/迁移 /etc/neu-box/runtime.env |
行为契约、hook phase 验证记录、边界 → docs/runtime-hook.md
构建与打包细节 → docs/packaging.md
登记接口的跨仓库契约(字段、状态码)→ neu_box_worker/docs/worker-api.md
# 装二进制 + 生成配置 + 注册成 Docker 默认 runtime
sudo bash scripts/install.sh --rpm=./dist/rpm/neu-box-runtime-0.1.0-1.aarch64.rpm
# 必须重启 dockerd:会杀掉这台机器上当时所有运行中的容器,进维护窗口做
docker ps
sudo systemctl restart docker
docker info --format '{{.DefaultRuntime}}' # 应当输出 neu-box-runtime不给 --rpm 就现场打一个包(要 go + rpmbuild),加 --no-build 则用 dist/rpm/
里已有的。装完确认一下配置:neu-box-config show。
升级跟安装是同一条命令,换个包就行:
sudo bash scripts/install.sh --rpm=<新版本的包>换二进制、迁移配置、确认 daemon.json 都由它一次做完,重复跑也没事。
sudo bash scripts/uninstall.sh # 优先还原 daemon.json
sudo systemctl restart docker
# RPM 装的机器:重启之后再删包(顺序反了 dockerd 起不了容器)
sudo dnf remove neu-box-runtimeuninstall.sh --purge 连 /etc/neu-box/runtime.env 一起删;不加就留着。
/etc/neu-box/runtime.env,由 neu-box-config 生成和迁移。生成之后照常手改 ——
你改过的值会被保留;从零手写、不带 NEU_BOX_CONFIG_VERSION 的文件不参与迁移。
| 键 | 默认值 | 说明 |
|---|---|---|
NEU_BOX_WORKER_URL |
http://127.0.0.1:59075 |
Worker 地址,hook 往这里登记 |
NEU_BOX_HOOK |
/usr/local/bin/neu-box-hook |
注入进 config.json 的 hook 路径 |
NEU_BOX_HOOK_PHASE |
createRuntime |
注入到哪个 OCI 阶段(prestart 是退路) |
NEU_BOX_REAL_RUNC |
/usr/local/bin/runc |
wrapper 后面真正接的 runtime |
neu-box-config show # 生效值 + 每个值的来源(file / env / default)
neu-box-config init ... # 重新生成 / 迁移(部署脚本替你调)
neu-box-config version # 软件版本 + 它支持的配置 schema 版本两个值需要和这台机器对上:
NEU_BOX_WORKER_URL的端口跟 worker 的NEU_BOX_PORT一致。这两个值住在两个 文件里,install.sh会从worker.env读出来交给配置工具。NEU_BOX_REAL_RUNC指向本机真正的 runc。install.sh会用command -v runc的 结果填它;你自己手写的那份配置不会被覆盖。
不用脚本时,按这四步做:
-
把三个二进制装到
/usr/local/bin(dnf install包,或照docs/packaging.md自己编)。 -
生成配置:
sudo neu-box-config init \ --real-runc "$(command -v runc)" \ --worker-url "http://127.0.0.1:<worker 的 NEU_BOX_PORT>" -
备份后改
/etc/docker/daemon.json:加default-runtime和runtimes["neu-box-runtime"]两个键,内容见docs/runtime-hook.md(以那份为准)。 -
重启 dockerd。
看现状:
| 现象 | 看什么 |
|---|---|
| 这台机器上所有容器都起不来 | neu-box-config show 里的 NEU_BOX_REAL_RUNC 是不是本机真正的 runc |
| 容器起得来,但里面设备全被拒 | 登记没成功。hook 的失败原因在 runc 的 stderr,也就是 journalctl -u docker |
docker info 里的 DefaultRuntime 不对 |
sudo bash scripts/uninstall.sh 之后重跑安装 |
| 想退回原生 runc | sudo bash scripts/uninstall.sh && sudo systemctl restart docker |