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

NextJS15集成next-intl本地正常但Docker部署报错求调试

Next.js 15 + next-intl 部署Docker报错调试求助

我搭建了Next.js 15项目,集成最新版next-intl实现国际化,未使用国际化路由、未配置中间件,采用App Router模式。该配置在本地开发环境及本地生产构建中均能正常运行,但部署到Docker镜像时出现报错,且报错信息不清晰(附错误截图)。以下是我的Docker Nginx配置及Dockerfile,请求协助调试该问题,并希望了解同类成功配置案例:

Docker Nginx配置

server {
    listen 80;

    location / {
      proxy_pass ${MAIN_HOST};
      proxy_http_version 1.1;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;            
      proxy_set_header X-Forwarded-Host $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    
    }  
  }

Dockerfile

# Use the official Node.js image as base
FROM node:23-alpine AS builder

# Set working directory
WORKDIR /app

# Copy package.json and lock file
COPY package.json pnpm-lock.yaml .npmrc ./

# Install dependencies
RUN npm install -g pnpm && pnpm install

# Install dependencies
RUN pnpm install --frozen-lockfile

# Copy the rest of the application code
COPY . .

RUN node src/scripts/generateMessagesRegistry.js

# Build the Next.js app
RUN pnpm build

# Use a lightweight Node.js runtime for production
FROM node:23-alpine AS runner

# # Set working directory
WORKDIR /app

# Install pnpm in the runner stage
RUN npm install -g pnpm

# Copy built files from builder stage
COPY --from=builder /app/next.config.ts ./
COPY --from=builder /app/public ./public
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/pnpm-lock.yaml ./pnpm-lock.yaml
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./
COPY --from=builder /app/src/i18n/messages ./src/i18n/messages
COPY --from=builder /app/src/i18n/messagesRegistry.js ./src/i18n/messagesRegistry.js

# Set environment to production
ENV NODE_ENV=production

# 👇 Skip husky install in production
# ENV HUSKY=0

# Install production dependencies
# RUN pnpm install --prod
# RUN pnpm install 

# Expose the port Next.js runs on
EXPOSE 3000

# Start Next.js server
CMD ["pnpm", "start"]

调试建议

  • 优先获取完整报错日志:执行docker logs <容器ID>,提取完整错误栈或资源缺失提示,这是定位问题的核心
  • 验证国际化文件完整性:进入容器docker exec -it <容器ID> sh,检查src/i18n/messagesRegistry.js及messages目录下文件是否存在、内容是否正确
  • 排查构建产物一致性:对比本地.next文件夹与镜像中.next的文件结构,确认是否有国际化相关chunk缺失
  • 优化Docker依赖配置:解开Dockerfile中RUN pnpm install --prod的注释,重新构建镜像,避免开发依赖干扰生产环境
  • 跳过Nginx直接测试:单独启动Next.js容器,访问3000端口验证应用是否正常,排除代理层问题
  • 检查环境变量:确保Docker运行时未遗漏next-intl所需的环境变量(如NEXT_PUBLIC前缀的国际化配置)

同类成功配置参考

简化版Dockerfile示例

FROM node:23-alpine AS builder

WORKDIR /app

COPY package.json pnpm-lock.yaml ./
RUN npm install -g pnpm && pnpm install --frozen-lockfile

COPY . .
RUN node src/scripts/generateMessagesRegistry.js
RUN pnpm build

FROM node:23-alpine AS runner

WORKDIR /app

ENV NODE_ENV=production
ENV HUSKY=0

COPY --from=builder /app/package.json ./
COPY --from=builder /app/pnpm-lock.yaml ./
RUN npm install -g pnpm && pnpm install --prod

COPY --from=builder /app/.next ./.next
COPY --from=builder /app/public ./public
COPY --from=builder /app/src/i18n/messages ./src/i18n/messages
COPY --from=builder /app/src/i18n/messagesRegistry.js ./src/i18n/messagesRegistry.js
COPY --from=builder /app/next.config.ts ./

EXPOSE 3000
CMD ["pnpm", "start"]

对应Nginx配置示例(假设Next.js容器端口为3000)

server {
    listen 80;
    server_name your-domain.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 18:12:34