我正在与一个使用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文件).