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

Next.js 13.4 Docker构建运行报错:无法找到express模块求助

问题:Docker运行Next.js 13.4项目提示找不到express模块

报错信息

> payment-gateway-react@0.1.0 start
> NODE_ENV=production node server/index.js

node:internal/modules/cjs/loader:998
  throw err;
  ^

Error: Cannot find module 'express'
Require stack:
- /usr/src/app/server/index.js
    at Function.Module._resolveFilename (node:internal/modules/cjs/loader:995:15)
    at Function.Module._load (node:internal/modules/cjs/loader:841:27)
    at Module.require (node:internal/modules/cjs/loader:1067:19)
    at require (node:internal/modules/cjs/helpers:103:18)
    at Object.<anonymous> (/usr/src/app/server/index.js:1:17)
    at Module._compile (node:internal/modules/cjs/loader:1165:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1219:10)
    at Module.load (node:internal/modules/cjs/loader:1043:32)
    at Function.Module._load (node:internal/modules/cjs/loader:878:12)
    at Function.executeUserEntryPoint [as runMain] 
  (node:internal/modules/run_main:81:12) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [ '/usr/src/app/server/index.js' ] 
}

现有Dockerfile内容

# Stage 1: Build environment

FROM node:16.19.0-alpine AS build
LABEL pgseamlessappversion=\"1.0.0.0\" \
      contact=\"Vouchagram\" \
      description=\"A minimal React.js Docker image for PGSeamless application\" \
      base.image=\"Node\" \
      maintainer=\"raj.r@gyftr.com\"

WORKDIR /usr/src/app

# Copy package.json and package-lock.json

COPY package*.json ./

# Install dependencies

RUN npm install

# Copy the rest of the application

COPY . /usr/src/app/.

# Build the Next.js application

RUN npm run build

# Stage 2: Production environment with Alpine
FROM node:16.19.0-alpine

WORKDIR /usr/src/app

# Copy only the necessary files from the build stage

COPY --from=build /usr/src/app/package*.json ./
COPY --from=build /usr/src/app/.next ./.next
COPY --from=build /usr/src/app/public ./public

COPY --from=build /usr/src/app/server./server

# Expose the necessary port
EXPOSE 6540

# Start the Next.js application
CMD [\"npm\", \"run\", \"start\"]

问题定位与解决指导

1. 核心问题:生产阶段未安装依赖

构建阶段执行了npm install,但生产镜像仅复制了package*.json,未重新安装依赖。运行时依赖express不存在,导致报错。

2. 次要问题:Dockerfile语法错误

复制server目录的指令存在语法错误:COPY --from=build /usr/src/app/server./server,路径中多了一个点,正确写法应为/usr/src/app/server ./server。

修复后的Dockerfile(生产阶段部分)

# Stage 2: Production environment with Alpine
FROM node:16.19.0-alpine

WORKDIR /usr/src/app

# Copy package files from build stage
COPY --from=build /usr/src/app/package*.json ./
# 安装生产依赖,仅安装dependencies中的包,减小镜像体积
RUN npm ci --only=production

# 复制构建产物与静态资源
COPY --from=build /usr/src/app/.next ./.next
COPY --from=build /usr/src/app/public ./public
# 修复server目录复制的语法错误
COPY --from=build /usr/src/app/server ./server

EXPOSE 6540

CMD ["npm", "run", "start"]

额外检查项

  • 确认package.json中express位于dependencies字段而非devDependencies,生产环境不会安装devDependencies中的包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 05:46:09