docker-compose volume不包含图像中的最新静态代码

时间:2016-03-16 15:42:40

标签: nginx docker docker-compose devops

在一个容器中,我有一个带有编译步骤的HTML应用程序。我希望在<proxy name="XXX"> ... <enableSec/> <policy key="conf:/policies/policy-xxx.xml"/> </proxy> 之上提供此服务。我不在乎安装我的本地文件系统。我想要的是在重建所有内容后让nginx包含最新版本的代码。

但每次我nginxup我的run容器时,它都包含一个随机旧版本的静态文件! (编译和未编译的)。

这就是docker-compose的样子:

nginx

这是快速入门(简化)中的Dockerfile

quickstart:
  build: ./services/quickstart
  volumes:
    - /var/www/html/quickstart

nginx:
  image: nginx:1.9.11
  volumes_from:
    - quickstart
  depends_on:
    - quickstart
  ports:
    - 80:80

我无法使用指向本地文件系统的卷,因为它不会拥有FROM codesimple/elm:0.16 WORKDIR /var/www/html/quickstart # compile code ADD ./ /var/www/html/quickstart/ RUN elm-make --yes Main.elm --output elm.js 文件,该文件是在构建docker镜像时创建的。

当我浏览快速入门时,我会看到最新的文件:

elm.js

但是当我浏览nginx时,我缺少elm.js,或者包含旧版本的index.html。

$ docker-compose run quickstart bash
> ls /var/www/html/quickstart
... index.html Main.elm elm.js ...

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您不应该使用卷代码,因为Compose preserves volumes when recreating containers。代码应随图像而变化。解决它:

  • docker-compose rm删除旧容器
  • 从撰写文件中删除volumes:
  • docker-compose up

如果您对图片进行了更改,请确保在运行docker-compose build之前同时up。在1.7.0(即将发布的版本)中,您将能够up --build