如何避免 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。
要解决此问题,您可以使用两个选项。
- 您可以 运行
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" ]
- 或者您可以编写 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
我正在尝试创建一个 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。 要解决此问题,您可以使用两个选项。
- 您可以 运行
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" ]
- 或者您可以编写 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