在docker中保持node_modules最新

我正在与一个在Docker和Node中构build的回购团队合作。 当别人安装节点包时,我git pull这些改变git pull package.jsonpackage-lock.json

不过,我不能只运行docker-compose build ,然后docker-compose up来安装这些新的节点包。 我不得不第一个docker-compose down -v 。 这是因为我们正在使用卷来存储节点模块。 我们并不拘束于此,坦率地说,只是将模块存储在docker图像层中。 但是,当我们绑定应用程序的体积( docker-compose.yml - .:/app )时,图像中的node_modules文件夹会被映射。

这感觉就像我们采取了错误的做法,但这似乎是普遍接受的做法。 我们的设置基于“ 在Docker中构build节点应用程序的教训 ”

我们的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创build一个卷,将节点模块从映像图层复制到一个卷中,这意味着当我们用一个不同的package.json ,图像被更新,但不是卷。 down的卷迫使它从更新的图像node_modules重新复制,这就是为什么工作。 请让我知道如果我的理解是不正确的:)

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

看起来像将当前文件夹映射到容器中的/ app。 我会擦除./node_modules,如果它存在于当前文件夹中,在做docker-compose之前。