DEBUG.WIKI
京东云;让 AI 进入真实业务;零售 · 物流 · 客服 · 硬件;查看方案 →
ZgoCloud:多地区部署,按需选节点;日本、美国、香港、德国
Evoxt;最高 6.0GHz CPU;高频云服务器 · 免费每周备份;查看配置 →

Prisma 7 在 Docker 里报 datasource.url required,先确认配置文件进了镜像

Prisma 7 迁移依赖 prisma.config.ts;镜像遗漏配置时,即使存在 DATABASE_URL 也可能失败。检查最终阶段、配置路径与迁移文件,按部署流程验收。

Prisma 7 在 Docker 里报 datasource.url required,先确认配置文件进了镜像

本地迁移正常,镜像里运行 prisma migrate deploy 却出现 The datasource.url property is required in your Prisma config file,即使 DATABASE_URL 确实存在,也不一定是环境变量传递失败。Prisma 7 的迁移连接配置在 prisma.config.ts 中;镜像缺了这个文件,CLI 就无法取得对应配置。

Prisma 7.2.0 的 Docker 环境可以出现这种错误。配置文件遗漏时,补上 COPY prisma.config.ts ./prisma.config.ts 是对应的处理办法。不过同一提示也可能来自配置内容或加载路径错误,需要先确认镜像中究竟缺了什么。

先进入实际执行迁移的阶段检查文件,不要只检查构建机:

docker run --rm --entrypoint sh my-app:check -c '
  set -eu
  pwd
  test -f prisma.config.ts
  test -f prisma/schema.prisma
  test -d prisma/migrations
'

my-app:check 替换成待检查的镜像。如果是多阶段构建,builder 里有文件,最终镜像仍可能没有。再看 .dockerignore 是否排除了配置或迁移目录,WORKDIR 是否改变,文件名大小写是否正确。

让迁移镜像包含同一套配置

PostgreSQL 项目的配置可以这样写,路径按实际目录调整:

import 'dotenv/config';
import { defineConfig, env } from 'prisma/config';

export default defineConfig({
  schema: 'prisma/schema.prisma',
  migrations: { path: 'prisma/migrations' },
  datasource: { url: env('DATABASE_URL') },
});

运行迁移的镜像阶段至少需要 Prisma CLI、配置文件和迁移目录。下面只是需要保留的 Dockerfile 片段,不能直接替代整个项目的构建流程:

WORKDIR /app
COPY prisma.config.ts ./prisma.config.ts
COPY prisma ./prisma

如果镜像在最终阶段仅安装生产依赖,而 prisma 位于 devDependencies,迁移 CLI 也可能不存在。可以使用单独的迁移阶段或迁移镜像,安装项目锁定的依赖;不要让 npx 临时下载一个未锁定版本来“修复”构建。

数据库结构变更更适合在部署时执行,而不是把生产数据库连接塞进镜像构建参数。构建出的镜像可以携带配置和迁移文件,部署任务通过运行环境提供 URL。在已经批准变更、确认备份和目标数据库的部署任务中执行:

npx prisma migrate status --config ./prisma.config.ts
npx prisma migrate deploy --config ./prisma.config.ts

先观察 CLI 是否明确加载预期配置、是否识别正确数据库及迁移目录,再执行 deploy。不要为诊断打印完整连接字符串;主机和数据库身份可以通过脱敏输出检查。migrate status 也需要数据库可达,成功加载配置后遇到连接或权限错误,应按新的错误继续排查。

Prisma 6 与 7 的连接配置位置不同,不能把旧版 schema 中的 url 机械复制回来。修复后还应重新构建最终镜像,检查所有阶段,验证迁移状态与部署后的实际表结构一致。应用查询成功只说明运行时客户端能连接,不能证明迁移 CLI 使用了同一个配置。