繁体   English   中英

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

[英]docker-compose volumes don't contain latest static code from image

在一个容器中,我有一个带有编译步骤的HTML应用程序。 我想在nginx上提供这个服务。 我不关心安装我的本地文件系统。 我想要的是在重建所有内容后让nginx包含最新版本的代码。

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

这是docker-compose的样子:

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

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

这里是快速启动中的Dockerfile(简化)

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

我不能使用指向我的本地文件系统的卷,因为它不会具有在elm.js时创建的elm.js文件。

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

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

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

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

我怎样才能解决这个问题?

您不应将卷用于代码,因为Compose在重新创建容器时会保留卷 代码应随图像而变化。 要解决这个问题:

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

如果您对映像进行更改,请确保在up之前也进行docker-compose build 在1.7.0(即将发布的版本)中,您可以进行up --build

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM