[Bug]: prisma cannot install in isolated environment

用户在 Docker 容器中运行 LiteLLM(litellm:v1.42.3-stable),容器没有互联网访问权限,且与 postgres:16.3 数据库容器配合使用。问题在 v1.42.0-stable 及更高版本中出现,v1.41.2-stable 版本不受影响。

[Bug]: prisma cannot install in isolated environment

[Bug]: prisma cannot install in isolated environment

快速结论:此问题发生在无互联网访问的隔离环境(如离线 Docker 容器)中运行 LiteLLM 时,Prisma 在安装或运行阶段尝试下载 Node.js 依赖(通过 nodeenv)失败。优先排查容器网络配置,或使用预先生成 Prisma client 的 Dockerfile。

问题场景

用户在 Docker 容器中运行 LiteLLM(litellm:v1.42.3-stable),容器没有互联网访问权限,且与 postgres:16.3 数据库容器配合使用。问题在 v1.42.0-stable 及更高版本中出现,v1.41.2-stable 版本不受影响。

报错原文

urllib.error.URLError: 
nodeenv installation failed; You may want to try installing `nodejs-bin` as it is more reliable.

Traceback (most recent call last):
  File "/usr/local/bin/prisma", line 8, in 
    sys.exit(main())
  File "/usr/local/lib/python3.11/site-packages/prisma/cli/cli.py", line 39, in main
    sys.exit(prisma.run(args[1:]))
  File "/usr/local/lib/python3.11/site-packages/prisma/cli/prisma.py", line 36, in run
    entrypoint = ensure_cached().entrypoint

原因分析

可能原因:

  • Prisma CLI 在首次运行时需要通过 nodeenv 下载 Node.js 运行时,但隔离环境(无互联网访问)导致网络请求失败(OSError: [Errno 99] Cannot assign requested address
  • Prisma 在 Dockerfile 中的 prisma generate 步骤虽然生成了客户端文件,但这些文件可能在容器运行时没有正确缓存或保留
  • LiteLLM v1.42.0+ 版本引入了对 Prisma 的运行时依赖,而旧版本(如 v1.41.2)可能未触发此流程

环境排查

  • 确认容器网络模式:是否使用 --network host 或自定义 bridge 网络
  • 确认 LiteLLM 版本:v1.42.0-stable 及以上受影响,v1.41.2-stable 不受影响
  • 确认能否从容器内部访问外部 HTTPS 资源(如 curl https://registry.npmjs.org
  • 确认 Dockerfile 中是否显式运行了 prisma generate(特别是使用 litellm-database 镜像时)
  • 确认 Postgres 数据库可达性(虽非直接原因,但可作为调试辅助)

解决步骤

  1. 可优先尝试:使用 LiteLLM 官方提供的 litellm-database Docker 镜像(预生成 Prisma client)。命令示例:
    docker pull ghcr.io/berriai/litellm-database:latest

    如果此镜像仍报相同错误,尝试使用 v1.41.2-stable 版本回退到旧版。

  2. 可优先尝试:基于官方 LiteLLM 镜像,在自定义 Dockerfile 中显式运行 Prisma 相关步骤:
    1. 使用 ghcr.io/berriai/litellm:main-latestv1.42.3-stable 作为基础镜像
    2. 在 Dockerfile 中添加:
      FROM ghcr.io/berriai/litellm:main-latest
      WORKDIR /app
      RUN pip install prisma
      RUN prisma generate
      EXPOSE 4000
      CMD ["--port", "4000"]
    3. 重建并运行自定义镜像
  3. 如果以上方法均无效,且环境允许有限网络访问,尝试在容器启动时提供 DNS 解析(如使用 --dns 8.8.8.8 参数)或修改网络配置增加互联网访问能力。
  4. 如果必须完全离线,考虑将 Node.js 二进制文件预装到容器中。可参考离线环境部署文档:LiteLLM 离线部署文档

验证方法

启动容器后,观察日志是否包含 nodeenv installation failedCannot assign requested address 错误。如果 LiteLLM 正常启动并输出类似 Running prisma migrate deploy 而没有异常栈跟踪,则问题解决。也可以测试 LiteLLM API 接口(如 POST /chat/completions)是否正常响应。

参考来源

BerriAI/litellm #4915

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 13490

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注