我正在尝试创建一个Docker容器来充当我的应用程序的测试环境。我正在使用以下Dockerfile:

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>
但是问题是当我使用node_modules挂载卷时,-v目录被删除了。任何解决此问题的方法?

最佳答案

当您将装载测试目录与$ PWD绑定(bind)时,您的容器测试目录将被$ PWD覆盖/装载。因此,您将不再将node_modules放入测试目录。
要解决此问题,您可以使用两个选项。

  • 您可以在单独的目录(如/ node)中运行npm install,并将代码安装在测试目录中,并像export NODE_PATH=/node/node_modules一样导出node_path env
    那么Doc​​kerfile就像:
  • 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
    

    关于docker - 如何避免node_modules文件夹被删除,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64525907/

    10-11 10:42