在docker中使node_modules保持最新

时间:2017-10-24 16:57:46

标签: node.js docker docker-compose dockerfile node-modules

我在团队中使用Docker和Node构建的repo。当其他人安装节点包时,我package-lock.jsondocker-compose builddocker-compose up进行了更改。

我不能只运行docker-compose down -v然后运行- .:/app来安装这些新的节点包。我必须先docker-compose.yml。这是因为我们使用卷来存储节点模块。我们并不依赖于此,坦率地说只是将模块存储在docker图像层中。但是,当我们绑定应用卷(node_modules中的Dockerfile)时,图像中的FROM node:8.4.0 WORKDIR /app COPY package.json package-lock.json ./ RUN npm install --loglevel=error --progess=false COPY . /app/ 文件夹会被遮蔽。

感觉我们采取了错误的做法,但这似乎是普遍接受的做法。我们的设置基于" Lessons from Building a Node App in Docker"

我们的docker-compose.yml

---
version: '2.1'

services:
  main:
    build:
      context: .
    volumes:
      - .:/app
      - /app/node_modules
    container_name: main
    command: ['node', 'index.js']

我们的docker-compose.yml

- /app/node_modules

我对该问题的理解是,在package.json文件中,卷down创建了一个卷,用于将图像层内的节点模块复制到卷中,这意味着当我们使用不同的node_modules再次构建应用程序时,图像会更新,但不会更新。 <div class="preload"> <img src="{{ asset('/img/ajax-loader.gif') }}" id="image" /> </div> 音量强制它从更新的图像<div class="content"> <div class="col-sm-12"> <div id="runs_bms_verlauf" style="width: 1300px; height: 350px; margin: 0 auto;"> </div> </div> <div class="clear" style="margin-top: 25px"></div> <div class="col-sm-12"> <div id="column_channel" style="width: 1300px; height: 350px; margin: 0 auto;"> </div> </div> <div class="spacer"> </div> <div class="col-sm-12"> <div id="column_days" style="width: 1300px; height: 350px; margin: 0 auto;"> </div> </div> <div class="spacer"> </div> <div class="col-sm-12"> <div id="pie_runs_zeit" style="width: 1300px; height: 350px; margin-top: 100px"> </div> </div> </div> </div> 重新复制,这就是为什么有效。如果我的理解不正确,请告诉我。)

我们在AWS ECS中运行,所以很遗憾,我们只能使用17.03.2-ce中提供的docker功能(暂时没有多阶段docker文件)。

1 个答案:

答案 0 :(得分:0)

看起来您将当前文件夹映射到容器中的/ app。如果它存在于当前文件夹中,我会删除./node_modules,然后再进行docker-compose。