我在团队中使用Docker和Node构建的repo。当其他人安装节点包时,我package-lock.json
对docker-compose build
和docker-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文件)。
答案 0 :(得分:0)
看起来您将当前文件夹映射到容器中的/ app。如果它存在于当前文件夹中,我会删除./node_modules,然后再进行docker-compose。