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

Next.js 12.2中间件在Docker环境中失效问题求助

解决Next.js 12.2稳定版中间件在Docker中不执行的问题

核心排查点与解决方案

1. 修正middleware.ts的存放位置

Next.js 12.2将稳定版中间件的存放位置从pages目录调整到了项目根目录(和package.json、next.config.js同级),而非你当前放置的pages目录下。之前beta版的_middleware.ts放在pages是正确的,但稳定版变更了规则,这是最可能的原因。

操作:把middleware.ts从pages/目录移动到项目根目录。

2. 确保Docker镜像中依赖完全更新

Docker构建时可能缓存了旧版本的node_modules,导致实际运行的Next.js版本还是12.0.7而非12.2。

操作:

  • 在Dockerfile中添加清理缓存的步骤:
    RUN yarn cache clean
    RUN yarn install --frozen-lockfile
    
  • 构建镜像时加上--no-cache参数,强制重新安装依赖:
    docker build --no-cache -t your-image-name .
    

3. 验证Docker构建流程是否正确执行next build

确保Dockerfile中包含生产构建步骤,且产物被正确复制:

# 构建应用
RUN yarn build

# 复制构建产物到运行目录
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/public ./public
COPY --from=builder /app/package.json ./package.json

4. 排查PM2启动配置问题

如果使用PM2启动,先尝试直接用next start启动应用,排除PM2配置的干扰:

  • 在Docker容器中执行yarn next start,观察是否能触发中间件的console.log输出。
  • 如果直接启动正常,检查PM2配置文件(如ecosystem.config.js),确保启动命令指向next start,且没有限制进程的日志输出。

5. 确认日志输出配置

Docker容器中可能没有正确捕获Next.js的日志,导致看不到console.log的输出:

  • 调整PM2配置,开启日志输出:
    module.exports = {
      apps: [{
        name: 'next-app',
        script: 'yarn',
        args: 'next start',
        out_file: '/dev/stdout',
        error_file: '/dev/stderr',
        merge_logs: true
      }]
    };
    
  • 使用docker logs <container-id>查看容器的所有输出日志。

内容的提问来源于stack exchange,提问作者Martín Cabo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:22:53