在构建期间Docker ADD文件夹然后暴露给VOLUME

时间:2016-05-13 10:12:10

标签: docker docker-compose

我正在使用docker-compose作为基本的网络应用程序。构建映像时,它会复制(ADD)中的静态JS文件,然后构建它们。

然后我想使用VOLUME将该目录公开给其他容器。

E.g。

Dockerfile

ADD ./site/static /site/static
WORKDIR /site/static
RUN gulp

搬运工-compose.yml

app:
    build: .
    volumes:
        - /site/static

http:
    image: nginx
    volumes_from: 
        - app

nginx.conf

location /static {
    alias /site/static
}

(注意,这只是一个例子)

问题在于它似乎第一次工作(即当卷不存在时),但是从未被修改过的图像覆盖。如果我纯粹使用Dockerfile,我可以将VOLUME放在ADD之后实现这一目标。

有没有办法允许这个,或者我接近它完全错了?

由于

1 个答案:

答案 0 :(得分:0)

可能的解决方案1 ​​

我可能错了,但我认为问题在于你何时(以及如果)

docker-compose down && docker-compose up 

重新创建容器,新的"匿名"卷已创建。 你可以检查我的猜测:

docker volume ls

我会尝试使用命名卷,如下所示:

version: "2"
volumes:
  app-volume: ~
services:
  app:
    build: .
    volumes:
      - app-volume:/site/static
  http:
    image: nginx
    volumes: 
      - app-volume:/site/static

你需要docker-compose 1.6.0+并且需要一个版本为1.10.0+的Docker Engine才能使用docker-compose文件的第2版。

可能的解决方案2

app:
  build: .
  volumes:
    - ./site/static:/site/static # maps host directory `./site/static` (relative to docker-compose.yml) to /site/static inside container
http:
  image: nginx
  volumes_from: 
    - app

并删除

ADD ./site/static /site/static
来自Dockerfile的