llama-strata dockerfile设计

一句话

  • 镜像只 bake 壳(terminal 0.1.49.2),真正的版本号是运行时的组合:terminal 壳+engine 挂载+pack 挂载,tag 上的 0.1.52 是组合版本号,不是 bake 版本。

四组件版本真相

组件版本落点bake 还是挂载
terminal 壳0.1.49.2Dockerfile 第 33 行 COPYbake 进镜像
engine 主0.1.52strata.yml 第 30 行挂载运行时挂载,镜像里只留空位
dsv410.1.49.2strata.yml 第 32 行挂载运行时挂载,槽位独立(engine-dsv41)
packgyro-m_strata-0.1.52strata.yml 第 29 行挂载运行时挂载,ro,归模型旁
镜像 tagllama-strata:0.1.52-v100strata.yml 第 10 行只是个名字,不保证内容

构建

docker build -f build/dockerfiles/strata/Dockerfile build/ -t llama-strata:<tag>
  • 底座:ghcr.io/ggml-org/llama.cpp:server-cuda(与 llama-v100 同底座)。
  • 上下文必须是 build/ 整目录,因为 COPY 源(packages/components-skel)与 Dockerfile 不在同一子目录。
  • entrypoint:每次容器重建时重新落 settings.json(data_dir=/var/strata,installs=[\"/opt/strata/terminal\"]),HOME 在容器层,重建即回到镜像态。
  • rootless:HOME 与 /opt/strata/terminal 归 1000,容器以 user 1000:1000 运行。

运行(strata.yml 挂载三行即全部版本定义)

image: llama-strata:0.1.52-v100   # 第 10 行:名义版本
# 第 29 行:pack(模型旁,ro)
- ../../data/models_sata/.../packs/gyro-m_strata-0.1.52:/var/strata/packs/gyro-m_strata-0.1.52:ro
# 第 30 行:主 engine 版本 pin(挂载路径即版本号)
- ../../build/packages/strata-engine-0.1.52-linux-x86_64-cuda-cuda12:/opt/strata/share/strata/components/engine/0.1.52-linux-x86_64-cuda-cuda12:ro
# 第 32 行:dsv41(另一槽位,不参与主引擎选择)
- ../../build/packages/strata-dsv41-0.1.49.2-linux-x86_64-cuda-cuda13:/opt/strata/terminal/engine-dsv41/strata-dsv41-0.1.49.2-linux-x86_64-cuda-cuda13:ro
  • 引擎无版本号变量,靠"挂了哪个版本目录"决定;今天只挂 0.1.52 一个,无二义性。
  • preset/engine 日志走命名卷 strata-state(第 28 行),prepare 重建,随时可清空。
  • 跑法:.env 切 STRATA_INI → docker compose -f strata.yml up -d(8080),与 llama.cpp 栈互斥。

三个坑(配置不动,只记录)

  • tag 名不副实:0.1.52-v100 看起来像 bake 版本,实际 bake 的 terminal 是 0.1.49.2;准确读法是"能跑 0.1.52 组合的壳"。
  • Dockerfile 第 33 行写死 strata-terminal-0.1.49.2:升壳时两处必须一起改(包目录+COPY 行),光改 tag 会静默沿用旧壳。
  • 升壳不需要等 terminal 包:terminal 就是 control 包(见 §terminal 包的来源),取新版 strata-control-<ver>-linux-x86_64.tar.gz 解到 build/packages/strata-terminal-<ver>/ 即可。

terminal 包的来源(2026-11-06 实锤)

  • terminal 与 control 是同一个包:官方 install.sh 按 install-manifest.txt 里对应平台行的 strata-control-<ver>-<platform>.tar.gz 下载,解包到 terminal/<version>,再建 current 软链+PATH。
  • 三处地址(同一 release 文件夹,即 feed 包的 base):https://github.com/Niko1221/Strata/releases/latest/download/install.sh、…/install-manifest.txt、…/strata-control-<ver>-linux-x86_64.tar.gz。
  • manifest 实测行:linux-x86_64 0.1.57 strata-control-0.1.57-linux-x86_64.tar.gz 2ac78cff… 99944994——在用 0.1.49.2 就是 10 月下旬 manifest 指向的当时行。
  • 结论:跟踪 feed 的 control.version 就是在跟踪 terminal 壳版本,不存在错位;换 terminal 也不用找新源,按 manifest 取 control 包即可。

文件索引

文件(本机镜像)行号说了什么
build/dockerfiles/strata/Dockerfile7~9引擎不 bake,运行时挂载覆盖;升级=换包+build
同上33bake 的 terminal 版本(0.1.49.2)
device/v100/strata.yml10/29/30/32tag 名;pack;主 engine;dsv41
build/packages/目录名有哪些版本包可用(engine-0.1.52/terminal-0.1.49.2/dsv41-0.1.49.2)
device/v100/v100-qwen3.8-125b-strata-256K.ini头注 1~50 行needle 基线对照+寻优结论(docker vs host 数据源)