部署Next13应用后所有路径均返回404页面问题求助
Next13 App Router 容器化后全路由404排查方案
端口映射错误
检查Docker启动命令或docker-compose.yml的端口配置,Next.js默认监听3000端口,需确保容器3000端口与主机端口正确映射,比如执行docker run -p 80:3000 <镜像名>,若映射端口错误或未映射,访问会直接返回404。Dockerfile构建逻辑缺失关键步骤
确认Dockerfile是否正确复制构建产物到运行环境,标准的多阶段构建流程如下,若遗漏复制.next、public等目录,会导致Next.js无法读取路由资源:# 构建阶段 FROM node:18-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . RUN npm run build # 运行阶段 FROM node:18-alpine AS runner WORKDIR /app COPY --from=builder /app/.next ./.next COPY --from=builder /app/public ./public COPY --from=builder /app/package*.json ./ RUN npm ci --only=production EXPOSE 3000 ENV NODE_ENV production CMD ["npm", "start"]启动环境变量配置错误
必须确保启动时设置NODE_ENV=production,Next.js在生产模式下才会加载.next目录的构建产物。若用开发模式命令(如npm run dev)启动,会忽略已构建的路由文件,导致全路由404。App Router路由结构不符合规则
检查app目录下的文件命名是否正确:- 根路径
/需存在app/page.js(或.tsx)文件,而非传统的index.js - 子路由如
/about需对应app/about/page.js结构
若文件名或目录层级不符合要求,Next.js无法识别路由,直接返回404。
- 根路径
容器工作目录与文件权限问题
- 进入容器执行
pwd确认工作目录是否与Dockerfile中WORKDIR一致,若工作目录错误,Next.js找不到.next和public资源 - 检查文件权限,若
.next或public目录所有者为root,可能导致Next.js进程无法读取,可在Dockerfile中添加:RUN chown -R node:node /app USER node
- 进入容器执行
内容的提问来源于stack exchange,提问作者IHAB
相关产品推荐
相关产品推荐

