在 Docker 多阶段构建中找不到 Nest.js CLI

问题描述 投票:0回答:1

我正在尝试为我的 Node.js 和 Nest.js 应用程序设置多阶段 Docker 构建。 Dockerfile 包括安装依赖项、构建应用程序和运行它。但是,我在 Dockerfile 的生产阶段遇到了

npm run build
命令的问题。

这是我的 Dockerfile 的简化版本:

# Use node base image with tag 18-slim
FROM node:18-slim as base

# Set NODE_ENV environment variable to production
ENV NODE_ENV=production

# Expose port 3000
EXPOSE 3000

# Create app directory and set permissions
WORKDIR /app
RUN chown -R node:node /app

# Switch to non-root user
USER node

# Copy package.json and package-lock.json
COPY --chown=node:node package*.json ./

# Install dependencies
RUN npm install && npm cache clean --force

# Copy source code
COPY --chown=node:node . .

# Development stage
FROM base as dev

# Set working directory
WORKDIR /app

# Copy source code from base stage
COPY --from=base /app .

# Set PATH environment variable in dev stage
ENV PATH /dev/node_modules/.bin:$PATH

# Set NODE_ENV environment variable to development
ENV NODE_ENV=development

# Command to run development server
CMD ["npm", "run", "start:dev"]

# Production stage
FROM base as prod

# Set working directory
WORKDIR /app

# Copy source code from base stage
COPY --from=base /app .

# Set PATH environment variable in dev stage
ENV PATH /dev/node_modules/.bin:$PATH

# Build production code
RUN npm run build

# Command to run production server
CMD ["node", "dist/main.js"]

我收到的错误消息是:

sh: 1: nest: not found

Nest.js CLI 在生产构建期间似乎在 PATH 中不可用,即使它作为开发依赖项安装在我的 package.json 中。

如何确保 Nest.js CLI 在 Dockerfile 的生产构建过程中在 PATH 中可用?

docker dockerfile nest
1个回答
0
投票

查看将

/dev/node_modules/.bin
更改为
/app/node_modules/.bin
是否可以解决问题。


base
阶段,指令
WORKDIR /app
设置以下指令的工作目录,例如要在
RUN
执行的
/app
,以便以下 指令
RUN npm install
创建
/app/node_modules

但后来,在

dev
prod
阶段,指令
ENV PATH
包含路径
/dev/node_modules/.bin
,这与
base
阶段的设置相矛盾。

© www.soinside.com 2019 - 2024. All rights reserved.