如何运行开发和生产nestjs应用程序docker docker compose



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

如果我运行命令";docker compose-up dev";一切都很好,但当我运行生产命令";docker组合产品";我得到以下错误:

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

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

您在上一个构建阶段没有指定WORKDIR /app,所有文件都被复制到root。

最新更新