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

Docker部署Next.js14项目报错:Cannot find module 'next'求助

问题分析与解决方案

核心问题

  1. Yarn版本不一致:仅在builder阶段设置了Yarn 4,但installer/runner阶段未配置,导致依赖安装使用系统默认的Yarn 1.x,无法正确解析Yarn 4的lockfile,依赖安装不完整。
  2. Turbo构建流程错误:builder阶段先安装全量依赖再执行turbo prune,不符合Turbo分层构建规范,导致生成的out目录依赖缺失。
  3. 文件复制路径错误:runner阶段复制standalone文件的路径与Next.js 14的输出结构不匹配,启动时找不到依赖模块。

修改后的Dockerfile

# Builder阶段:生成依赖清单和构建产物
FROM node:20-alpine AS builder
RUN apk add --no-cache libc6-compat
WORKDIR /app

# 启用Corepack并指定Yarn 4.3.1版本
RUN corepack enable
RUN yarn set version 4.3.1

# 仅复制必要配置文件,避免缓存失效
COPY package.json yarn.lock ./
COPY turbo.json turbo.json
COPY apps/web/package.json apps/web/package.json

# 执行Turbo Prune生成最小依赖集
RUN yarn dlx turbo prune --scope=web --docker

# Installer阶段:安装生产依赖并构建
FROM node:20-alpine AS installer
RUN apk add --no-cache libc6-compat
WORKDIR /app

# 同步Yarn版本
RUN corepack enable
RUN yarn set version 4.3.1

# 复制prune生成的依赖文件
COPY --from=builder /app/out/json/ .
COPY --from=builder /app/out/yarn.lock ./yarn.lock
COPY --from=builder /app/out/full/ .
COPY turbo.json turbo.json

# 仅安装生产依赖
RUN yarn install --production=true

# 执行应用构建
RUN yarn dlx turbo run build --filter=web...

# Runner阶段:运行应用
FROM node:20-alpine AS runner
WORKDIR /app

# 创建非特权用户
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
USER nextjs

# 复制standalone构建产物和静态资源
COPY --from=installer --chown=nextjs:nodejs /app/apps/web/.next/standalone/ ./
COPY --from=installer --chown=nextjs:nodejs /app/apps/web/public ./apps/web/public
COPY --from=installer --chown=nextjs:nodejs /app/apps/web/.next/static ./apps/web/.next/static

EXPOSE 3000
ENV PORT=3000

# Next.js 14 standalone的启动文件位于根目录
CMD node server.js

关键修改说明

  • 统一Yarn版本:在builder、installer阶段均配置Corepack和指定Yarn 4.3.1,确保全流程使用相同包管理器,避免依赖解析差异。
  • 优化Turbo流程:先复制必要配置文件再执行turbo prune,生成最小化依赖集,减少构建体积和冗余。
  • 修正启动路径:Next.js 14的standalone构建将server.js输出到apps/web/.next/standalone/根目录,因此启动命令改为node server.js。
  • 生产依赖安装:添加--production=true参数,仅安装生产依赖,缩小镜像体积。

额外排查步骤

  1. 验证Yarn版本:在installer阶段添加RUN yarn --version,确认输出为4.3.1。
  2. 检查目录结构:构建后进入installer临时容器,查看/app/apps/web/.next/standalone/下是否存在server.js和完整node_modules。
  3. 确认Next.js配置:确保next.config.js启用standalone模式:
    /** @type {import('next').NextConfig} */
    const nextConfig = {
      output: 'standalone',
      // 其他配置项
    }
    
    module.exports = nextConfig
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 19:44:52