微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐