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

Docker部署NestJS应用时提示找不到@nestjs/swagger模块

问题解决:Docker中运行NestJS应用提示找不到@nestjs/swagger模块

问题核心原因

你在Dockerfile里把所有项目依赖都全局安装了,但Node.js运行项目时,只会优先从当前项目目录的node_modules文件夹查找依赖,完全不会读取全局安装的包。再加上容器挂载了本地项目目录,进一步导致依赖加载路径混乱,最终触发模块找不到的错误。

解决方案

1. 重构Dockerfile,仅安装项目本地依赖

把原来的全局安装操作全部移除,让所有依赖通过yarn install安装到项目本地的node_modules中,修改后的Dockerfile如下:

FROM node:lts

WORKDIR /home/ubuntu/viteo-dev/viteo-backend-dev

# 先复制依赖配置文件,利用Docker分层缓存优化构建速度
COPY package.json yarn.lock ./
# 基于lockfile安装精确版本的本地依赖
RUN yarn install --frozen-lockfile

# 复制项目全部源码
COPY . .

EXPOSE 8030
CMD ["yarn", "start"]

2. 保留docker-compose的volume配置

你的docker-compose.yaml中已经配置了/home/ubuntu/viteo-dev/viteo-backend-dev/node_modules匿名volume,这个配置能让容器使用自己独立的node_modules,避免和本地依赖冲突,无需修改。

3. 彻底重建容器

执行以下命令清理旧容器并重新构建:

docker compose down -v
docker compose build --no-cache
docker compose up -d

关键说明

  • 全局安装(yarn global add)仅适用于系统级命令工具(比如nest CLI),项目运行依赖必须安装在项目本地,Node.js才能正确识别加载。
  • 先复制package.json再执行yarn install的顺序,能最大化利用Docker缓存,后续修改源码时无需重复安装依赖,提升构建效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 01:37:24