You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Docker Compose部署Next.js+Prisma+SQLite应用?

解决Next.js 14 + Prisma + SQLite Docker Compose部署的Prisma Client初始化错误

问题根源

你的部署问题来自两个核心错误:

  1. Dockerfile步骤顺序错误:prisma generate在npm install之前执行,此时依赖尚未安装,无法生成Prisma Client。
  2. Docker Compose卷挂载配置不当:挂载规则导致容器内的Prisma生成文件或依赖被本地目录覆盖。

修正Dockerfile

调整步骤顺序,确保先安装依赖再生成Prisma Client,同时优化权限处理:

# 基础镜像
FROM node:20-alpine

# 创建非root用户降低安全风险
RUN addgroup app && adduser -S -G app app

WORKDIR /app

# 先复制package文件,利用Docker缓存
COPY package*.json ./

# 切换root安装依赖(避免权限问题)
USER root
RUN npm install
# 修正文件所有权
RUN chown -R app:app .
USER app

# 复制prisma目录和项目代码
COPY ./prisma ./prisma
COPY . .

# 生成Prisma Client(此时依赖已安装)
RUN npx prisma generate

EXPOSE 3000

# 启动开发服务器
CMD ["npm", "run", "dev"]

修正Docker Compose配置

调整卷挂载规则,确保本地代码同步的同时,保留容器内的node_modules和Prisma生成文件,同时同步SQLite数据库:

version: "3.9"

services:
  web:
    build:
      context: .
    environment:
      DATABASE_URL: file:./prisma/dev.db
    ports:
      - "3000:3000"
    volumes:
      # 挂载本地项目目录到容器
      - .:/app
      # 保留容器内的node_modules,避免本地依赖覆盖
      - /app/node_modules
      # 单独同步SQLite数据库和迁移文件,确保数据一致性
      - ./prisma/dev.db:/app/prisma/dev.db
      - ./prisma/migrations:/app/prisma/migrations

额外优化步骤

  1. 添加.dockerignore文件:避免将本地冗余文件复制到镜像,减少体积并避免冲突:
    node_modules
    .next
    npm-debug.log
    
  2. 重新构建镜像:执行docker compose build --no-cache清除旧缓存,确保新配置生效。
  3. 启动容器并验证:执行docker compose up,通过以下命令查看容器日志确认无错误:
    docker compose logs web
    

内容的提问来源于stack exchange,提问作者CodeConnoisseur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 17:10:26