DS2API docker-compose 升级指南如何安全更新镜像且配置不丢【免费下载链接】ds2apiDeepSeek-Compatible Middleware Interface: A technical exploration project in Go, focusing on high-concurrency protocol adaptation. It serves as a reference implementation for converting diverse web protocols into standardized formats.项目地址: https://gitcode.com/GitHub_Trending/ds/ds2apiDS2API 是一个用 Go 编写的协议适配中间件把 DeepSeek Web 的对话能力转成 OpenAI、Claude、Gemini 兼容的 API自带 React 管理台WebUI。如果你已经用 docker-compose 部署过它现在想把 DS2API 升级到新版本这篇文章带你完整走一遍备份配置、选择镜像来源、重建容器、验证探针接口与管理台——整个过程十分钟以内账号和密钥全程不丢。原理先行DS2API 升级后配置为什么不丢动手之前先把三样东西在脑子里拆开。镜像像一个随时可换的安装包。DS2API 程序和 WebUI 管理台静态文件都打包在它里面官方镜像是ghcr.io/cjackhwang/ds2api:latest。它随时可以删掉、换成最新版不影响任何数据。容器是运行实例。相当于装完镜像后跑起来的那个进程。升级就是用新镜像把旧容器删掉重开容器本身是一次性的。config.json是镜像之外的数据。它放在你的宿主机上通过 bind mount绑定挂载即把宿主机的文件原样暴露进容器内挂到容器里的/data/config.json。账号、API Key、管理设置全在这个文件里和镜像无关。所以一次 DS2API 升级只是换了安装包没动你的数据这就是配置不会丢的根本原因。仓库根目录的 docker-compose.yml 与上面一一对应关键就三处配置ports: - ${DS2API_HOST_PORT:-6011}:5001 # 宿主机默认 6011 → 容器 5001 volumes: - ./config.json:/data/config.json # 配置挂载升级时保留端口映射可用环境变量DS2API_HOST_PORT覆盖配置挂载保证了数据留存。另外值得知道的是镜像默认以非 root 用户ds2api运行构建逻辑见 Dockerfile权限风险更小。升级四步走第一步备份 config.json做任何改动前先给配置留一份副本。万一出问题恢复只需要一步。cp config.json config.json.bak-$(date %Y%m%d)第二步选择镜像来源获取新镜像有两条路线按你的情况二选一。路线 A拉取官方 latest多数人选这条docker pull ghcr.io/cjackhwang/ds2api:latest产物与官方 Release 构建完全一致不需要本地有 Go 或 Node 环境是最稳的镜像更新方式。路线 B本地源码构建docker-compose up -d --build适用于你改过源码、要验证未发布的改动或网络受限访问不了镜像仓库的场景。加了--build后Compose 会先用仓库的 Dockerfile 本地执行一次docker build。⚠️ 默认 compose 文件只声明了image:而没有build:想走这条路线先给服务加上build: context: .否则命令会直接报错。这个 Dockerfile 是多阶段构建各部分分开编译最终只把产物放进镜像Node 24 编译 WebUI 静态文件Go 以CGO_ENABLED0交叉编译出纯静态二进制版本号当前 4.6.1由-ldflags从根目录VERSION文件注入最后拷入debian:bookworm-slim轻量基底。层缓存Docker 逐层比对指令与文件是否变化未变的层直接复用则让只有少量源码变动的二次构建非常快。第三步重建容器在仓库根目录执行docker-compose up -d走的是路线 B就改成docker-compose up -d --build。这条命令内部按顺序做三件事先准备新镜像--build触发本地构建否则检查本地、缺失时拉取 latest再拿 compose 文件和现有容器做对比发现镜像 ID 变了标记容器需要重建最后停掉并删除旧的ds2api容器用新镜像创建同名新容器重新挂载config.json、注入.env变量按restart: always策略在后台启动。由于配置走挂载而不是写进镜像新容器启动后账号与密钥原样都在。第四步观察启动日志docker-compose logs -f正常时你会看到一条包含starting ds2api的日志字段里有port5001和local_urlhttp://127.0.0.1:5001说明服务已经成功监听。如果日志出现server initialization failed或者容器反复重启优先怀疑config.json——JSON 语法错误是这一步最常见的翻车原因。验证升级成功四个检查项逐项过在宿主机上逐条执行全部通过才算这次升级闭环。1. 存活探针curl -s http://127.0.0.1:6011/healthz预期输出{status:ok}2. 就绪探针curl -s http://127.0.0.1:6011/readyz预期输出{status:ready}3. 模型列表curl -s http://127.0.0.1:6011/v1/models预期输出当前可用模型的 JSON 数组。4. 管理台登录浏览器访问http://localhost:6011/admin用.env里配置的DS2API_ADMIN_KEY登录。能进入控制台并看到账号列表说明 WebUI 和配置都完好。避坑速查升级 DS2API 的四个高频问题问日志报open /data/config.json: permission denied现象容器能起来但读取配置失败日志里出现上面的报错。原因bind mount 是单文件挂载宿主机文件权限太低或属主不匹配时容器内的非 root 用户读不到。解决宿主机执行chmod 644 config.json再重启容器。问升级后管理台打不开现象API 都正常唯独浏览器访问localhost:6011/admin一直卡住。原因端口不一致——你在.env里改过DS2API_HOST_PORT但浏览器还在用默认的 6011。解决核对DS2API_HOST_PORT的实际取值访问真实映射的端口加/admin。问升级后账号好像不见了现象管理台账号列表是空的像配置丢了。原因老版本曾把配置写到镜像内的/app路径镜像一换目录内容随之消失。解决新版本会自动回退读取历史的/app/config.json建议显式设置DS2API_CONFIG_PATH/data/config.json并让宿主机的config.json成为唯一配置来源。问想回退旧版本latest 已经被覆盖了现象升级后发现问题想回退但本地的 latest 已经是新版本。原因latest是移动标签不保留旧镜像。解决拉取固定 tag 的镜像例如docker pull ghcr.io/cjackhwang/ds2api:v3.0.0再把 compose 里的image字段改成该 tag重建容器即可。写在最后DS2API 的 docker-compose 升级本质上就一句话换镜像、重建容器配置靠挂载兜底永远安全。更完整的部署细节与排查清单可以查仓库里的 docs/DEPLOY.md。最后一条建议生产环境把 image 固定成具体 tag如ghcr.io/cjackhwang/ds2api:v4.6.1让版本不再随 latest 悄悄漂移——升级变成你主动决定的一件事。【免费下载链接】ds2apiDeepSeek-Compatible Middleware Interface: A technical exploration project in Go, focusing on high-concurrency protocol adaptation. It serves as a reference implementation for converting diverse web protocols into standardized formats.项目地址: https://gitcode.com/GitHub_Trending/ds/ds2api创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考