NestJS Docker构建报错找不到tsconfig.build.json问题求助
报错原因
- Dockerfile 多阶段构建的第二阶段未设置工作目录,所有从构建阶段复制的文件都被放到了容器根目录而非
/app目录下,同时开发模式启动命令npm run start:dev依赖tsconfig.build.json、tsconfig.json两个配置文件,你第二阶段的复制逻辑里没有包含这两个文件。 - docker-compose.yml 配置存在多处错误:首先build配置中指定的dockerfile名称为
Dockerfile.development,和你实际提供的Dockerfile文件名不匹配,会导致构建镜像时读取不到正确的配置;其次volumes配置将本地当前目录挂载到容器/app目录,会直接覆盖容器内构建好的所有文件,如果你本地目录下没有对应ts配置文件,或者文件位置不对,就会直接触发报错;另外image字段填写为Dockerfile属于无效值,无需额外配置。 - 构建逻辑和启动命令不匹配:你使用了多阶段构建提前打包出了dist产物,但是最终启动用的是开发模式命令,完全浪费了多阶段构建的能力,还额外引入了ts编译依赖。
修复方案
根据你的使用场景选择对应配置即可:
场景1:开发环境(需要本地代码热更新)
1. 重命名你的Dockerfile为Dockerfile.development,修改内容如下:
FROM node WORKDIR /app COPY package*.json ./ COPY prisma ./prisma/ RUN npm install EXPOSE 3000 CMD [ "npm", "run", "start:dev" ]
2. 修改docker-compose.yml内容如下:
version: "3.7" services: web: build: context: "./" dockerfile: "Dockerfile.development" volumes: - "./:/app:z" # 排除node_modules挂载,避免本地和容器内依赖版本/架构不一致导致报错 - /app/node_modules environment: NODE_ENV : "development" TZ: "${TZ:-America/Los_Angeles}" ports: - "3000:3000"
3. 确认本地项目根目录(执行docker-compose命令的目录)下存在tsconfig.build.json和tsconfig.json文件,文件读取权限正常。
场景2:生产环境(无需热更新,直接运行构建产物)
1. 修改Dockerfile内容如下:
FROM node AS builder WORKDIR /app COPY package*.json ./ COPY prisma ./prisma/ COPY tsconfig.build.json ./ COPY tsconfig.json ./ RUN npm install COPY . . RUN npm run build FROM node WORKDIR /app COPY --from=builder /app/node_modules ./node_modules COPY --from=builder /app/package*.json ./ COPY --from=builder /app/dist ./dist EXPOSE 3000 # 生产模式用start:prod启动,无需ts相关配置文件 CMD [ "npm", "run", "start:prod" ]
2. 修改docker-compose.yml内容如下:
version: "3.7" services: web: build: context: "./" dockerfile: "Dockerfile" environment: NODE_ENV : "production" TZ: "${TZ:-America/Los_Angeles}" ports: - "3000:3000"
修复完成后执行docker-compose down -v清理旧容器和挂载卷,再执行docker-compose up --build -d重新构建启动即可。
内容的提问来源于stack exchange,提问作者Erika
相关产品推荐
相关产品推荐

