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

如何为含Next.js的Monorepo构建Docker镜像?解决目录找不到问题

解决Next.js Monorepo的Docker镜像构建问题

1. 先在目标项目目录完成Next.js构建

Monorepo结构下每个Next.js项目需要单独执行构建生成.next文件夹,所以必须在Docker构建前,先进入对应项目目录完成构建:

  • 在Jenkins构建步骤中添加命令:
    cd packages/[你的目标项目名]
    npm install
    npm run build
    
    替换[你的目标项目名]为packages目录下实际的项目文件夹名称。

2. 调整Skaffold的构建上下文配置

当前Skaffold的构建上下文是Monorepo根目录,导致Docker找不到目标项目的.next文件夹,需要将构建上下文指向目标项目目录:
修改Skaffold配置如下:

build:
  artifacts:
    - image: containerregistry-ssss.net/container-sandbox/my-docs
      docker:
        dockerfile: ./packages/[你的目标项目名]/Dockerfile  # 指定Dockerfile的正确路径
      kaniko:
        buildContext:
          localDir:
            path: ./packages/[你的目标项目名]  # 将构建上下文设为目标项目目录

3. 修正Dockerfile的文件复制路径

如果构建上下文已改为目标项目目录,Dockerfile可直接使用相对项目根目录的路径:

WORKDIR /app
COPY .next/standalone ./.next/standalone
COPY .next/static ./.next/static
COPY public ./public
# 添加启动命令(根据你的Next.js版本调整)
CMD ["node", ".next/standalone/server.js"]

若Dockerfile放在Monorepo根目录不想调整上下文,需修改COPY路径为目标项目的相对路径:

WORKDIR /app
COPY ./packages/[你的目标项目名]/.next/standalone ./.next/standalone
COPY ./packages/[你的目标项目名]/.next/static ./.next/static
COPY ./packages/[你的目标项目名]/public ./public

4. 验证构建流程

  • 本地测试:进入目标项目目录执行npm run build,确认.next文件夹生成;
  • Docker直接构建测试:docker build -f ./packages/[你的目标项目名]/Dockerfile ./packages/[你的目标项目名],验证文件复制是否正常;
  • Jenkins中运行Skaffold构建,确认问题解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 05:00:05