Skip to content

Docker 部署 frontend 构建失败:pnpm 新版本与旧 lockfile 不兼容 #118

Description

@panyuncreater

问题描述

按照 README「方案一:Docker 部署」在项目根目录执行 docker-compose up -d 时,frontend 镜像构建失败(backend 显示 CANCELED 是 frontend 失败后并行构建被连带取消),服务无法启动。

此前用同样方式部署成功过,清理本地镜像后重新构建必现该问题,推测任何全新环境(无构建缓存)部署都会遇到。

环境信息

  • 操作系统:Windows 11,PowerShell
  • Docker 版本:(请填写,docker --version 查看)
  • 项目版本:main 分支最新代码,2026-09-10 clone

复现步骤

  1. git clone https://github.com/jihe520/MathModelAgent.git
  2. 在项目根目录执行 docker-compose up -d
  3. frontend 构建到 RUN pnpm install --frozen-lockfile 步骤时报错退出

错误日志

```
=> [frontend 4/6] RUN pnpm install --frozen-lockfile
Error: Cannot verify the identity of the @pnpm/exe.linux-x64 native binary:
it is missing from pnpm-lock.yaml.
For help, run: pnpm help install

ERROR: failed to solve: process "/bin/sh -c pnpm install --frozen-lockfile"
did not complete successfully: exit code: 1
```

(报错截图附在下方)

原因分析

frontend/Dockerfile 中安装 pnpm 时未锁定版本,当前会装到 pnpm 10.x 及以上。pnpm 10 引入了 manage-package-manager-versions 机制:会根据 package.json 的 packageManager 字段下载 @pnpm/exe 二进制,并在 pnpm-lock.yaml 中查找该二进制的 integrity 校验记录。仓库中的 pnpm-lock.yaml 由旧版 pnpm 生成,不包含这条记录,导致校验失败、构建以 exit code 1 中断。

之前能部署成功,是因为当时构建时装到的还是旧版 pnpm,没有这层校验;清理镜像后重新构建装到了新版 pnpm,问题才暴露。

建议修复

在 frontend/Dockerfile 中锁定 pnpm 大版本(lockfileVersion 9.0 对应 pnpm 9):

```dockerfile
RUN npm install -g pnpm@9
```

或者在 pnpm install 之前禁用 pnpm 的自身版本管理:

```dockerfile
ENV PNPM_CONFIG_MANAGE_PACKAGE_MANAGER_VERSIONS=false
```

临时解决方案(供遇到同样问题的用户参考)

本地修改 frontend/Dockerfile 按上述方式固定 pnpm 版本后,执行 docker-compose up -d --build 强制重建即可正常构建启动。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions