node.js – 在docker中使node_modules保持最新

我正在与一个使用Docker和Node构建的repo的团队合作.当其他人安装节点包时,我git将这些更改提取到package.json和package-lock.json.

不过,我不能只运行docker-compose构建,然后使用docker-compose来安装这些新的节点包.我必须首先使用docker-compose down -v.这是因为我们使用卷来存储节点模块.我们并不依赖于此,坦率地说,只是将模块存储在docker图像层中.但是,当我们绑定应用程序卷( – .:/ app in docker-compose.yml)时,图像中的node_modules文件夹被遮蔽.

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

我们的Dockerfile:

FROM node:8.4.0
workdir /app
copY package.json package-lock.json ./
RUN npm install --loglevel=error --progess=false
copY . /app/

我们的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文件中,volume – / app / node_modules创建了一个卷,它将节点模块从图像层内部复制到一个卷中,这意味着当我们再次使用它构建应用程序时一个不同的package.json,图像被更新但不是卷.降低音量迫使它从更新的图像node_modules重新复制,这就是为什么这样做的原因.如果我的理解不正确,请告诉我:)

我们在AWS ECS中运行,所以不幸的是我们只能使用17.03.2-ce中提供的docker功能(目前没有多级docker文件).

解决方法

看起来您将当前文件夹映射到容器中的/ app.在执行docker-compose之前,我会删除当前文件夹中存在的./node_modules.

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...