Docker中npm run build失败:microservice-one无专属package.json报错
问题排查与解决
错误原因
rimraf: not found 是因为你的Dockerfile在构建时没有安装项目依赖,rimraf作为根目录package.json里的开发依赖,是npm run build命令的依赖项,未安装自然找不到。
你的Dockerfile开发阶段仅复制了代码,却未执行npm install就直接运行npm run build,这必然会报错。另外生产阶段的配置存在冗余,无需复制整个项目目录。
修正方案
1. 调整microservice-one的Dockerfile
# 开发构建阶段 FROM node:16-alpine As development WORKDIR /usr/src/app # 先复制依赖文件,利用Docker缓存加速构建 COPY package*.json ./ # 安装所有依赖(包含dev依赖,因为build需要rimraf) RUN npm install # 复制整个项目代码 COPY . . # 执行构建命令 RUN npm run build # 生产运行阶段 FROM node:16-alpine as production ARG NODE_ENV=production ENV NODE_ENV=${NODE_ENV} WORKDIR /usr/src/app # 只复制依赖文件,安装生产依赖 COPY package*.json ./ RUN npm ci --only=production # 从构建阶段复制编译后的dist文件 COPY --from=development /usr/src/app/dist ./dist # 启动服务 CMD ["node", "dist/apps/microservice-one/main"]
关键调整点:
- 开发阶段先复制
package*.json再执行npm install,利用Docker缓存,后续代码改动无需重新安装依赖 - 明确安装所有依赖(包括dev依赖),确保
npm run build能找到rimraf - 生产阶段仅安装生产依赖,减少镜像体积,同时只复制必要文件(依赖文件和dist),无需复制整个项目
2. 验证docker-compose配置
你的docker-compose.yml中microservice-one的build配置没问题,context为项目根目录、dockerfile路径正确,无需修改。
3. 构建测试
执行docker-compose build microservice-one单独测试该服务的构建,确认错误消失。
内容的提问来源于stack exchange,提问作者shAkur
相关产品推荐
相关产品推荐

