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

Docker部署NestJS应用:生产环境启动报错找不到dist/main模块

问题:Docker生产容器找不到/app/dist/main模块

我是Docker新手,正在为API构建开发和生产版本容器。docker-compose up dev运行正常,但执行docker-compose up prod时提示找不到/app/dist/main模块,怀疑是未复制或创建必要文件目录,相关配置及错误日志如下:

错误日志

[+] Running 2/2
 - Network sip-api_nestjs-network  Created                                                                                                                                                                                  0.7s 
 - Container api-prod              Created                                                                                                                                                                                  0.1s
Attaching to api-prod
api-prod  | 
api-prod  | > sip-api@0.0.1 start:prod
api-prod  | > node dist/main
api-prod  |
api-prod  | node:internal/modules/cjs/loader:959
api-prod  |   throw err;
api-prod  |   ^
api-prod  |
api-prod  | Error: Cannot find module '/app/dist/main'
api-prod  |     at Function.Module._resolveFilename (node:internal/modules/cjs/loader:956:15)
api-prod  |     at Function.Module._load (node:internal/modules/cjs/loader:804:27)
api-prod  |     at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
api-prod  |     at node:internal/main/run_main_module:17:47 {
api-prod  |   code: 'MODULE_NOT_FOUND',
api-prod  |   requireStack: []
api-prod  | }
api-prod exited with code 1

Dockerfile

#############################
# BUILD FOR LOCAL DEVELOPMENT
#############################
FROM node:16-alpine AS development

USER node

WORKDIR /app

COPY --chown=node:node package*.json ./

RUN npm ci

COPY --chown=node:node . .

######################
# BUILD FOR PRODUCTION
######################

FROM node:16-alpine AS build

USER node

WORKDIR /app

COPY --chown=node:node package*.json ./

COPY --chown=node:node --from=development /app/node_modules ./node_modules

COPY --chown=node:node . .

RUN npm run build

ENV NODE_ENV=production

RUN npm ci --only=production && npm cache clean --force

###################
# PRODUCTION
###################

FROM node:16-alpine AS production

COPY --chown=node:node --from=build /app/node_modules ./node_modules
COPY --chown=node:node --from=build /app/views ./views
COPY --chown=node:node --from=build /app/dist ./dist

CMD [ "node", "dist/main.js" ]

docker-compose.yml

version: '3.8'

services:

    dev:
        container_name: api-dev
        image: api-dev
        build:
            context: .
            target: development
            dockerfile: ./Dockerfile
        ports:
            - 3200:3200
            - 9229:9229
        networks:
            - nestjs-network
        working_dir: /app
        volumes:
            - ./:/app
            - /app/node_modules
        command: npm run start:dev
        restart: unless-stopped

    prod:
        container_name: api-prod
        image: api-prod
        build:
            context: .
            target: production
            dockerfile: ./Dockerfile
        ports:
            - 3200:3200
            - 9230:9230
        networks:
            - nestjs-network
        working_dir: /app
        volumes:
            - ./:/app
            - /app/node_modules
        command: npm run start:prod
        restart: unless-stopped

networks:
    nestjs-network:

解决方法

1. 移除生产服务的本地目录挂载

prod服务配置中挂载了本地./:/app目录,会直接覆盖容器内构建阶段生成的/app/dist目录。如果本地机器未执行npm run build生成dist文件夹,容器启动后必然找不到模块。

修改docker-compose.yml中prod服务的volumes部分,删除本地目录挂载:

prod:
    # 其他配置保持不变
    volumes:
        # 移除 - ./:/app 这一行
        - /app/node_modules

2. 统一启动命令的文件后缀

Dockerfile的production阶段CMD为node dist/main.js,但docker-compose.yml中prod服务的command执行的是npm run start:prod,而该脚本对应的命令是node dist/main(缺少.js后缀)。虽然Node.js通常能自动识别,但建议保持一致:

  • 要么修改package.json中的start:prod脚本为node dist/main.js
  • 要么修改docker-compose中prod的command为node dist/main.js

3. 验证构建阶段的dist目录生成

在build阶段执行npm run build后,确认项目会在/app/dist下生成main.js文件。可临时修改Dockerfile,添加目录检查命令:

RUN npm run build
RUN ls -la /app/dist  # 新增此行查看dist目录内容

重新构建镜像后,查看输出确认main.js存在。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 09:35:23