生产镜像此前只有 ca-certificates + tini,容器 rootfs 又只读,运维在容器内既
装不了 apt 也没有 curl/ps,排查只能靠宿主机的 /proc。把只读诊断工具装进
runtime 阶段,实测体积 +7.7 MB:
curl procps(ps/pgrep/free) iproute2(ss/ip) jq bind9-dnsutils(dig) netcat-openbsd(nc)
全部是只读查询能力,不引入包管理之外的写能力,也不新增 shell 解释器。
顺手修掉四处已被事实推翻的表述:
1. Dockerfile 的 ENV RUN_MODE=webhook 是死变量——该标识符随 Config::from_env()
删除后代码零读取,文档 5 处都记着已删除,镜像却还在设。删掉并留注释防回退。
2. deployment.md 说「runtime 只装了 ca-certificates tini」「镜像内没有 curl/wget」,
两处都是健康检查建议的承重理由,随内置 curl 一起更新为「技术上可行但不建议」。
3. deployment.md 说非 root 用户是 uid 1000,实际 useradd --system 给 uid 999,
已实测修正。
4. retired.md 里 compose healthcheck 示例的删除理由把「镜像无 curl」当主因,
真正的承重原因是 src/main.rs 没有 CLI 子命令解析,已改写并标注 curl 已内置。
同时补齐 hoststack.yaml 缺失的 install 段(cargo fetch --locked),并在 start 段
写清临时开 --debug 的确切改法与「必须在容器内探、别走公网域名」的约束。
验证:
- 包名与安装步骤在同一 debian:bookworm-slim 基础镜像内实测通过
- useradd 实测输出 uid=999,与设计一致
- docker build --check 无告警
- GATE-DOCS PASS 6/6(SECTION-REF 217 / 0,PATH AUDIT 364 / 0)
注:install: { command: ... } 的键名是按现有 build:/start: 的同构推断的,
若 HostStack 拒绝该键,删掉这两行即可,不影响 build/start。
|
||
|---|---|---|
| .. | ||
| charter.md | ||
| deployment.md | ||
| design.md | ||
| reference.md | ||
| retired.md | ||
| roadmap.md | ||