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

Docker-compose启动后NestJS容器dist文件消失的解决求助

问题解决:NestJS Docker容器中dist文件丢失、SWC编译失败

问题根源

  1. 挂载目录覆盖容器产物:docker-compose中直接将本地./backend挂载到容器/app,导致容器构建阶段生成的dist目录被本地无dist的目录覆盖,启动时找不到编译产物。
  2. Watch模式的目录冲突:npm run dev使用--watch+SWC编译时,会监听文件变化并重新生成dist,但挂载的本地目录会干扰容器内的文件生成/同步,导致dist文件消失。

解决方案

方案1:调整挂载策略,保护容器内的依赖和编译产物

修改docker-compose.yml的volumes配置,仅挂载需要热重载的src目录,用匿名卷保留容器内的node_modules和dist,避免被本地目录覆盖:

version: '3.5'

services:
  backend:
    build: 
      context: ./backend
      dockerfile: Dockerfile
    container_name: backend
    ports: 
      - '3001:3001'
    volumes:
      - ./backend/src:/app/src  # 仅挂载src实现代码热重载
      - /app/node_modules       # 匿名卷保留容器内的依赖包
      - /app/dist               # 匿名卷保留容器内的编译产物
    depends_on:
      - database

  database:
    image: mongo:6.0
    container_name: mongodb
    restart: always
    ports:
      - '27017:27017'
    environment:
      MONGO_INITDB_ROOT_USERNAME: 'XXX'
      MONGO_INITDB_ROOT_PASSWORD: '1234'

方案2:优化Dockerfile(可选,提升权限安全性)

添加非root用户配置,避免容器内权限问题导致文件生成失败:

FROM node:18-alpine

# 创建非root用户组和用户
RUN addgroup -S appgroup && adduser -S appuser -G appgroup

# 缓存依赖,提升构建速度
COPY package.json /tmp/package.json
RUN cd /tmp && npm install
RUN mkdir -p /app && cp -a /tmp/node_modules /app

WORKDIR /app
COPY . .

# 修正目录权限
RUN chown -R appuser:appgroup /app

# 切换到非root用户
USER appuser

# 构建编译产物
RUN npm run build

CMD [ "npm", "run", "dev" ]

验证步骤

  1. 重新构建镜像:docker-compose build
  2. 启动容器:docker-compose up -d
  3. 查看容器日志:docker logs -f backend,确认无找不到/dist/main的报错
  4. 修改本地src目录下的代码,检查容器日志是否触发自动重新编译,验证热重载正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 23:20:29