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

Next.js本地构建正常,Docker镜像构建时npm run build报找不到pages目录错误

问题修复指南

报错的直接原因

你的Dockerfile步骤顺序存在硬伤,是触发报错的核心:
执行npm run build的时候,项目源代码根本还没被复制到容器里。
现在的构建流程走到RUN npm run build这一步时,容器的/usr/src/next-website目录下只有提前COPY的package*.json文件和刚安装的node_modules,pages目录、server.js这些核心代码,是等build跑完之后才通过COPY . .放进去的。Next.js在工作目录下找不到pages自然报错,和本地有没有这个目录没有关系。

容易被忽略的路径问题

你提到本地目录结构是app/pages/index.js,这里存在路径匹配的风险:
如果本地跑npm run dev的目录是外层包了app文件夹的目录,哪怕把COPY顺序调对了,复制进容器的结构依然是/usr/src/next-website/app/pages,而Next.js默认只会在当前工作目录根下查找pages,还是会报同样的错误。

具体修复步骤

  • 调整Dockerfile执行顺序
    把源代码COPY的步骤挪到npm run build之前,既不破坏依赖层的缓存优势,也能保证build时拿到完整代码,修正后的Dockerfile参考:
FROM node:14-alpine
RUN mkdir -p /usr/src/next-website
WORKDIR /usr/src/next-website
COPY package*.json ./
RUN npm i
# 先复制所有源代码,再执行build
COPY . .
RUN npm run build
EXPOSE 94
CMD ["node", "server.js"]
  • 对齐文件路径
    如果你的pages目录确实在app子文件夹下,二选一调整即可:

    • 把容器的工作目录切换到实际存放下级代码的路径,新增一行WORKDIR /usr/src/next-website/app
    • 把COPY命令改成只复制app目录下的内容,即把COPY . .替换为COPY app/ ./
  • 补充.dockerignore规则
    避免本地的node_modules、.next目录被复制进容器覆盖对应文件,在项目根目录新建.dockerignore,排除以下内容:

    • node_modules
    • .next
    • .git
    • 本地调试生成的临时缓存文件

注意:如果使用的Next.js版本在12.x以上,node:14已经停止官方支持,建议根据Next.js的版本要求替换对应的node基础镜像,避免出现其他兼容性问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 04:45:03