NodeJS 为什么在Docker中使用packagename的NPM install可以正常工作,但'NPM install'不起作用?

3ks5zfa0  于 2023-04-20  发布在  Node.js
关注(0)|答案(1)|浏览(135)

我正在node.js应用程序中构建一个docker文件。如果我以这种方式安装包,它可以工作:

RUN npm install express
RUN npm install axios
RUN npm install cloudinary

这些软件包将安装。我有大约12个软件包,这个应用程序和运行他们的安装一个接一个这样对我来说似乎不好。但如果我运行整个安装一次像这样:

RUN npm install

一旦它到达npm installation部分,它将挂起超过7分钟,并最终失败,并出现以下错误:

executor failed running [/bin/sh -c npm install --only=production]: exit code: 1

是什么引起的?
下面是dockerfile:

## multi stage system
FROM node:lts-alpine

 # create root application folder
 WORKDIR /app

 # copy configs to /app folder
 COPY package.json ./
 COPY package-lock.json ./
 COPY tsconfig.json ./
 COPY ecosystem.config.js ./
 # copy source code to /app/src folder
 COPY src /app/src
 RUN npm install

 RUN npm run build


 FROM node:lts-alpine

 WORKDIR /app
 COPY package.json ./ 
 COPY package-lock.json ./

 RUN npm install --omit=dev

 RUN npm install pm2 -g

  COPY --from=0 /app/build ./build

  RUN npm uninstall typescript


   USER node

   CMD ["pm2-runtime", "ecosystem.config.js"]

   EXPOSE 5000

我在Windows 11上运行这个

33qvvth1

33qvvth11#

我决定使用这个解决方案:我只是简单地提到了我想安装的所有包,作为package.json脚本的一部分,并在docker build中运行了该脚本。

"install": "npm install axios bcrypt cloudinary express jsonwebtoken multer mysql2 nodemailer nodemailer-express-handlebars nodemailer-sendgrid sequelize socket.io ",

在dockerfile中,我做了RUN npm run install

相关问题