如何避免 node_modules 文件夹被删除

How to avoid node_modules folder being deleted

我正在尝试创建一个 Docker 容器作为我的应用程序的测试环境。我正在使用以下 Docker 文件:

FROM node:14.4.0-alpine
WORKDIR /test
COPY package*.json ./
RUN npm install .
CMD [ "npm", "test" ]

如您所见,它非常简单。我只想安装所有依赖项而不是复制代码,因为我将使用以下命令 运行 该容器:

docker run -v `pwd`:/test -t <image-name>

但问题是当我使用 -v 挂载卷时,node_modules 目录被删除。有解决此问题的解决方法吗?

当您将挂载测试目录与 $PWD 绑定时,您的容器测试目录将 overridden/mounted 与 $PWD。所以你不会再在测试目录中得到你的node_modules。 要解决此问题,您可以使用两个选项。

  1. 您可以 运行 npm install 在单独的目录中,如 /node 并将您的代码安装在测试目录中,并导出 node_path 环境,如 export NODE_PATH=/node/node_modules 那么 Dockerfile 将是这样的:
FROM node:14.4.0-alpine
WORKDIR /node
COPY package*.json ./
RUN npm install .
WORKDIR /test
CMD [ "npm", "test" ]

  1. 或者您可以编写 entrypoint.sh 脚本,在 运行 时间将 node_modules 文件夹复制到容器的测试目录中。
FROM node:14.4.0-alpine
WORKDIR /node
COPY package*.json ./
RUN npm install .
WORKDIR /test
COPY Entrypoint.sh ./
ENTRYPOINT ["Entrypoint.sh"]

和Entrypoint.sh类似于

#!/bin/bash
cp -r /node/node_modules /test/.
npm test

方法一

您可以采取一种解决方法

CMD npm install && npm run dev

方法二

docker 在 docker-compose build 上安装 node_modules,运行 在 docker-compose up 上安装应用程序。

文件夹结构

docker-compose.yml

version: '3.5'
services: 
  api:
    container_name: /$CONTAINER_FOLDER    
    build: ./$LOCAL_FOLDER
    hostname: api
    volumes:
      # map local to remote folder, exclude node_modules
      - ./$LOCAL_FOLDER:/$CONTAINER_FOLDER
      - /$CONTAINER_FOLDER/node_modules
    expose:
      - 88

Dockerfile

FROM node:14.4.0-alpine

WORKDIR /test
COPY ./package.json .
RUN npm install 

# run command
CMD npm run dev