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
相关产品推荐
相关产品推荐

