我正在开发 Nx monorepo,里面有几个项目。 现在,我需要对我的 Nestjs 应用程序进行 dockerize。
我不确定如何在“后端”文件夹(我的 Nestjs 应用程序)中创建 Docker 文件,以按预期执行。
通常我使用以下命令启动应用程序:
yarn run nx backend:serve
但这在docker上不起作用。它说的是command nx backend:serve is not found
。
我的 dockerfile 看起来像这样:
FROM node:20.9.0-alpine3.18
WORKDIR /src
RUN npm add --global nx@latest
# Copy package.json and package-lock.json from the root of the build context
COPY package*.json ./
# Install dependencies
RUN yarn
# Expose the port the app runs on
EXPOSE 3000
# Command to run the application
CMD [ "yarn", "run","nx backend:serve" ]
我目前正在开发 NX Nestjs,这是我的 Dockerfile,这可能不是最好的,但它有效。我使用 pm2 来启动应用程序。请记住将
yourNestAppName
更改为您想要的应用程序名称和端口。
Dockerfile(/apps/应用程序名称/Dockerfile)
# build
FROM node:lts-alpine AS builder
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install --only=development --silent
COPY . .
RUN npx nx run yourNestAppName:build:production
# Production image
FROM node:lts-alpine
ENV NODE_ENV production
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install -g pm2@latest
RUN npm install --only=production --silent
COPY --from=builder /usr/src/app/dist/apps/yourNestAppName ./build
ENTRYPOINT ["pm2-runtime","build/main.js"]
还有 docker-compose.yml (在文件夹中)
services:
api:
container_name: api
restart: always
ports:
- "3001:3001"
build:
context: .
dockerfile: ./apps/api/Dockerfile
environment:
- NODE_ENV=production
- PORT=3001
expose:
- 3001