繁体   English   中英

如何运行开发和生产nestjs app docker docker-compose

[英]How to run development and production nestjs app docker docker-compose

我是 docker 的新手,我正在尝试使用我的 api 的开发和生产版本构建一个容器。

如果我运行命令“docker-compose up dev”一切正常,但是当我运行生产命令“docker-compose up prod”时,我收到以下错误:

[+] 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

我从错误中了解到的是它没有复制或创建包含必要文件的目录,但我不确定。

This is my 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" ]

This is my 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:

Can anyone help me with this error? Thanks in advance

您没有在最后一个构建阶段指定WORKDIR /app ,所有文件都被复制到根目录。

问题出在 package.json 命令 npm run start:prod 指向 dist/main 而它应该指向 dist/src/main 那是

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM