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

使用Dockerfile与Docker Compose构建Next.js13生产镜像遇‘build not found’错误求助

Next.js Docker构建报错:Command "build" not found 排查

问题描述

使用Dockerfile与Docker Compose构建Next.js生产镜像时,执行docker-compose up --build命令触发报错:error Command "build" not found,相关配置及报错信息如下:

Dockerfile内容

FROM node:18
                                                  
WORKDIR /app
  
COPY next-env.d.ts next.config.js tsconfig.json ./

COPY package.json yarn.lock ./
RUN yarn install --frozen-lockfile

COPY public src .next ./

EXPOSE 3000

RUN yarn build --cwd .
      
CMD yarn start

Docker Compose内容

version: "3.9"

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    restart: unless-stopped
    env_file:
      - .env
    ports:
      - "${PORT}:${PORT}"

报错信息

=> CACHED [app 2/7] WORKDIR /app                                                                                                                                                         0.0s
 => CACHED [app 3/7] COPY next-env.d.ts next.config.js tsconfig.json ./                                                                                                                   0.0s
 => [app 4/7] COPY package.json yarn.lock ./                                                                                                                                              0.0s
 => [app 5/7] RUN yarn install --frozen-lockfile                                                                                                                                         53.4s
 => [app 6/7] COPY public src .next ./                                                                                                                                                    0.4s 
 => ERROR [app 7/7] RUN yarn build --cwd .                                                                                                                                                0.6s 
------
 > [app 7/7] RUN yarn build --cwd .:
0.526 yarn run v1.22.19
0.544 warning package.json: No license field
0.569 error Command "build" not found.
0.569 info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
------
failed to solve: process "/bin/sh -c yarn build --cwd ." did not complete successfully: exit code: 1

问题排查与解决方案

1. 核心问题:package.json缺失build脚本

报错直接指出找不到build命令,说明你的项目package.json的scripts字段中未定义build指令。Next.js项目的标准build脚本为next build,需确保package.json包含如下配置:

{
  "scripts": {
    "build": "next build",
    "start": "next start"
    // 其他自定义脚本...
  }
}

2. Dockerfile逻辑优化

原Dockerfile存在几个不合理的地方,调整后可提升构建效率并避免潜在问题:

  • 调整文件复制顺序:先复制依赖配置文件,安装依赖后再复制源码,利用Docker缓存加速重复构建
  • 移除.next目录的提前复制:该目录是build生成的产物,构建过程中会自动生成,无需提前拷贝
  • 简化build命令:默认在当前工作目录执行,无需添加--cwd .参数

优化后的Dockerfile:

FROM node:18

WORKDIR /app

# 先复制依赖配置文件,缓存依赖安装层
COPY package.json yarn.lock ./
RUN yarn install --frozen-lockfile

# 复制项目核心文件与源码
COPY next-env.d.ts next.config.js tsconfig.json ./
COPY public ./public
COPY src ./src

EXPOSE 3000

# 执行生产构建
RUN yarn build

# 启动生产服务
CMD yarn start

3. 验证步骤

  • 本地检查package.json,确认scripts中存在"build": "next build"
  • 清理旧Docker缓存:执行docker-compose down -v --rmi all,再重新运行docker-compose up --build

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 03:35:29