【问题标题】:How to avoid node_modules folder being deleted如何避免 node_modules 文件夹被删除
【发布时间】:2020-10-26 02:41:14
【问题描述】:

我正在尝试创建一个 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>

但问题是当我使用-v 挂载卷时,node_modules 目录被删除。有什么办法可以解决这个问题?

【问题讨论】:

    标签: docker docker-volume


    【解决方案1】:

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

    1. 您可以在 /node 等单独目录中运行 npm install 并将代码挂载到测试目录中并导出 node_path env 像 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
    

    【讨论】:

      【解决方案2】:

      方法 1

      一种解决方法是你可以做的

      CMD npm install &amp;&amp; npm run dev

      方法 2

      让 docker install node_modules on docker-composedocker-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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-07
        • 2020-01-25
        • 2013-02-15
        • 1970-01-01
        • 2023-02-01
        • 2017-05-24
        • 2021-03-21
        • 2017-12-17
        相关资源
        最近更新 更多