问题描述
按照 README「方案一:Docker 部署」在项目根目录执行 docker-compose up -d 时,frontend 镜像构建失败(backend 显示 CANCELED 是 frontend 失败后并行构建被连带取消),服务无法启动。
此前用同样方式部署成功过,清理本地镜像后重新构建必现该问题,推测任何全新环境(无构建缓存)部署都会遇到。
环境信息
- 操作系统:Windows 11,PowerShell
- Docker 版本:(请填写,
docker --version 查看)
- 项目版本:main 分支最新代码,2026-09-10 clone
复现步骤
git clone https://github.com/jihe520/MathModelAgent.git
- 在项目根目录执行
docker-compose up -d
- 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 强制重建即可正常构建启动。
问题描述
按照 README「方案一:Docker 部署」在项目根目录执行
docker-compose up -d时,frontend 镜像构建失败(backend 显示 CANCELED 是 frontend 失败后并行构建被连带取消),服务无法启动。此前用同样方式部署成功过,清理本地镜像后重新构建必现该问题,推测任何全新环境(无构建缓存)部署都会遇到。
环境信息
docker --version查看)复现步骤
git clone https://github.com/jihe520/MathModelAgent.gitdocker-compose up -dRUN 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强制重建即可正常构建启动。