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

Next13 Docker镜像启动报错:找不到server.js文件

解决Next.js 13 standalone模式下Docker CMD启动报错找不到server.js的问题

以下是针对该问题的排查和解决步骤:

1. 核对Dockerfile核心配置

确保Dockerfile正确处理standalone产物的复制,且WORKDIR与CMD路径匹配:

  • 运行阶段需将.next/standalone目录的所有内容复制到容器/app目录:
    FROM node:18-alpine AS runner
    WORKDIR /app
    ENV NODE_ENV production
    
    # 将standalone产物复制到当前工作目录(/app)
    COPY --from=builder /app/.next/standalone ./
    COPY --from=builder /app/.next/static ./.next/static
    COPY --from=builder /app/public ./public
    
    # 使用相对路径执行server.js
    CMD ["node", "server.js"]
    
    关键是COPY --from=builder /app/.next/standalone ./会把server.js直接放到/app下,因此CMD用相对路径即可。

2. 检查docker-compose.yml配置

避免覆盖Dockerfile的WORKDIR或使用错误的command路径:

  • 不要在docker-compose中设置working_dir,让容器继承Dockerfile的/app工作目录
  • 若需指定command,使用相对路径而非绝对路径:
    services:
      next-app:
        build: .
        ports:
          - "3000:3000"
        # 正确写法:使用相对路径
        command: node server.js
        # 错误写法:绝对路径易引发上下文问题
        # command: node /app/server.js
    

3. 验证镜像内文件结构

手动进入容器确认文件位置,确保server.js在/app目录下:

# 启动容器进入交互模式
docker run -it --rm <你的镜像名称> sh
# 查看/app目录下的文件
ls /app

若能看到server.js,说明文件复制正确,问题大概率出在CMD或docker-compose的路径配置上。

4. 排查CMD执行模式差异

  • 优先使用exec格式的CMD(数组形式):CMD ["node", "server.js"],该模式直接执行node命令,避免shell环境变量干扰路径解析
  • 若使用shell格式CMD(如CMD node server.js),需确保shell环境的路径配置正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 10:27:43