Shu*_*pli 12 docker docker-compose docker-volume
我对如何使用命名数据卷(不是数据容器)感到困惑.
我有一个命名数据卷app_src,/usr/src/app使用docker compose文件挂载.但是,在对我的源代码(本地)进行更改后,构建映像不会更新卷.
我正在构建这样的图像,
docker-compose -f development.yml build并运行它docker-compose -f development.yml up -d.
为了确认卷没有改变,我附加到正在运行的容器中,并且确实没有更新源代码.
这是我的docker撰写文件development.yml和Dockerfile我的web服务.版本:'2'
services:
web:
restart: always
build: ./web
expose:
- "8000"
volumes:
- app_src:/usr/src/app
links:
- postgres:postgres
env_file: development.env
command: ./start_web.sh
volumes:
app_src: {}
FROM python:3.4.4
WORKDIR /usr/src/app
RUN rm -rf /usr/src/app/*
COPY . /usr/src/app/
RUN pip install --no-cache-dir -r requirements.txt
Run Code Online (Sandbox Code Playgroud)
我可以通过像这样安装主机来使它工作,
volumes:
- ./web/src:/usr/src/app
Run Code Online (Sandbox Code Playgroud)
我在Ubuntu 16.04上运行docker 1.11.2.我的理解错了吗?我确实看了一下文档,但是我能找到任何能很好地解释音量的东西.
看起来您正在尝试使用具有命名卷装入和Dockerfile的docker-compose来修改该位置的内容.这不起作用,因为Dockerfile正在创建一个图像.docker-compose定义了在该图像顶部运行的运行容器.您将无法在映像创建中修改卷,因为只有在创建映像并运行容器后才会装入该卷.
如果要更新命名卷,请考虑使用侧容器:
docker run -v app_src:/target -v `pwd`/web/src:/source --rm \
busybox /bin/sh -c "tar -cC /source . | tar -xC /target"
Run Code Online (Sandbox Code Playgroud)
您可以根据需要运行该容器以更新指定的卷.git clone如果要对大型存储库进行小的更改,还可以将tar替换为从源存储库中提取的内容,或者甚至是rsync(您需要在映像上安装).
您还可以通过清空命名卷(rm -rf/vol/dir或删除卷并创建新卷)然后重新启动容器来解决此问题.在容器启动时,如果包含空的命名卷,则默认为将该位置的图像内容复制到卷中.
| 归档时间: |
|
| 查看次数: |
6899 次 |
| 最近记录: |