我对应如何使用命名的数据卷(而不是数据容器)感到困惑。
我有一个使用docker compose文件app_src
挂载的命名数据卷/usr/src/app
。但是,在更改了我的源代码(本地)后,构建映像不会更新该卷。
我正在建立这样的形象,
docker-compose -f development.yml build
并运行它docker-compose -f development.yml up -d
。
为了确认音量没有变化,我将其附加到正在运行的容器中,并且确实如此,源代码未更新。
这是我的docker compose文件,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
我可以这样安装主机来使其工作,
volumes:
- ./web/src:/usr/src/app
我在运行docker 1.11.2的Ubuntu 16.04上。我的理解错了吗?我确实看了一下文档,但是发现任何可以很好地解释该卷的内容。
似乎您正在尝试将docker-compose与命名的卷挂载和Dockerfile一起使用以修改该位置的内容。这将不起作用,因为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"
您可以根据需要运行该容器以更新您的命名卷。git clone
如果您要对大型存储库进行较小的更改,也可以用诸如从源存储库中提取的tar甚至是rsync(您需要将其安装在映像上)替换tar 。
您还可以通过清空命名卷(rm -rf / vol / dir或删除该卷并创建一个新卷)来解决此问题,然后重新启动容器。在容器启动时,如果包含一个空的命名卷,则默认值为将该位置的图像内容复制到该卷中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句