![[Bug]: LiteLLM Docker image is broken for all fresh deployments since v1.90.0 — DB migrations silently fail (libatomic.so.1)](https://www.chat-gpts.plus/wp-content/uploads/2026/07/33650-f588d569.jpg)
[Bug]: LiteLLM Docker image is broken for all fresh deployments since v1.90.0 — DB migrations silently fail (libatomic.so.1)
快速结论:自 v1.90.0 起,所有全新部署的 LiteLLM Docker 镜像在首次启动时数据库迁移会静默失败,根本原因是运行时镜像中缺少 npm,导致 Prisma 在启动时被迫回退到 nodeenv 并因 libatomic.so.1 缺失而崩溃。优先排查运行时镜像中 npm 是否在 PATH 上。
问题场景
使用 LiteLLM Docker 镜像进行全新部署(新环境、CI 管道、首次容器启动),连接到一个全新的空 PostgreSQL 数据库时触发。代理启动后看似正常,但所有涉及团队/预算/模型/凭据的 API 调用都会返回 HTTP 500。该问题影响 v1.90.0 及之后的所有版本。
报错原文
Running prisma migrate deploy
node: error while loading shared libraries: libatomic.so.1: cannot open shared object file: No such file or directory
subprocess.CalledProcessError: Command ['.../nodeenv/bin/npm', 'install', 'prisma@5.4.2'] returned non-zero exit status 127.
Database migration failed but continuing startup
HTTP 500: The table 'public.LiteLLM_TeamTable' does not exist in the current database.
原因分析
根本原因在于 #28888 修复了构建阶段(builder stage)的 npm 问题,但错误地假设运行时阶段(runtime stage)不再需要 npm。事实上,prisma migrate deploy 在容器启动时针对全新数据库仍需要 npm 来引导 Prisma CLI。当 npm 不在 PATH 上时,Prisma 的解析器会回退到 nodeenv,而 Wolfi 基础镜像不提供 libatomic.so.1,导致 Node.js 崩溃。
更精确的测量证实:v1.89.4 镜像中 npm 位于 /usr/local/bin/npm,而 v1.90.0 镜像中 shutil.which("npm") 返回 None,导致解析器落入 nodeenv 分支。libatomic.so.1 在 v1.89.4 中同样缺失,但因为 npm 存在,nodeenv 从未被调用。
# 测量结果(取自 Issue 评论)
ghcr.io/berriai/litellm:v1.89.4
shutil.which("npm") -> /usr/local/bin/npm
_get_global_binary("npm") -> /usr/local/bin/npm (resolver takes the 'global' branch)
ghcr.io/berriai/litellm:v1.90.0
shutil.which("npm") -> None
_get_global_binary("npm") -> None (resolver falls through to from_nodeenv())
注意:docker/Dockerfile.non_root 的第 123 行也存在相同的运行时缺失 npm 问题,该文件的 npm 仅在 ui-builder 和 builder 阶段出现,不会传递到第 114 行开始的运行时阶段。
环境排查
- 确认使用的 LiteLLM Docker 镜像标签是否为 v1.90.0 或更新版本
- 确认同时部署了新的空 PostgreSQL 数据库(无 litellmdb schema)
- 确认
DATABASE_URL环境变量已设置 - 检查容器内
shutil.which("npm")是否返回路径(非根用户镜像同样缺失) - 确认 Prisma 版本为 0.11.0(该报告两端确认相同,非 Prisma 本身变化)
解决步骤
- 临时降级方案:使用 LiteLLM 镜像标签
v1.89.4或之前版本部署,直到官方修复发布。 - 修复方案(可优先尝试):将
npm(以及nodejs)添加回运行时阶段的 apk 安装列表中——参照 #28519/#28888 对构建阶段的修复方式。 - 对于非根用户镜像(Dockerfile.non_root),同样需要修改第 123 行附近的 apk add 命令,添加
npm。 - 另一种替代方案(由 Issue 提出但未实现):预构建 Prisma CLI/query engine,避免在运行时调用 nodeenv。
注意:在 Dockerfile 中直接添加 libatomic 到运行时镜像不是正确的修复方式——它只是让已出错的 nodeenv 路径能够工作;正确的修复是保持 npm 存在,从而阻止解析器离开全局分支进入 nodeenv。
验证方法
容器启动后检查日志:确认 prisma migrate deploy 不再报错,且不再出现 libatomic.so.1: cannot open shared object file 错误。同时向任意团队/预算相关 API 端点发出请求,确认返回 HTTP 200 而不是 500(表不存在错误)。也可在容器内运行 shutil.which("npm") 检查 npm 是否在 PATH 上。



