重build后文件更改不会反映在Docker镜像中

我试图为我的PHP web应用程序(php-fcm)设置两个Docker镜像,由NGINX反向代理。 理想情况下,我希望将Web应用程序的所有文件复制到基于php-fcm的映像中,并将其作为卷展示。 这样,两个容器(网页和应用程序)都可以通过NGINX服务静态文件和php-fcm来解释php文件。

泊坞窗,compose.yml

version: '2' services: web: image: nginx:latest depends_on: - app volumes: - ./site.conf:/etc/nginx/conf.d/default.conf volumes_from: - app links: - app app: build: . volumes: - /app 

Dockerfile:

 FROM php:fpm COPY . /app WORKDIR /app 

上述设置按预期工作。 但是,当我对文件做任何改变,然后做

 compose up --build 

新的文件不会在结果图像中拾取。 尽pipe以下消息表明图像确实正在重build:

 Building app Step 1 : FROM php:fpm ---> cb4faea80358 Step 2 : COPY . /app ---> Using cache ---> 660ab4731bec Step 3 : WORKDIR /app ---> Using cache ---> d5b2e4fa97f2 Successfully built d5b2e4fa97f2 

只有删除所有的旧图像的伎俩。

任何想法可能会导致这一点?

 $ docker --version Docker version 1.11.2, build b9f10c9 $ docker-compose --version docker-compose version 1.7.1, build 0a9ab35 

'volumes_from'选项将卷从一个容器装载到另一个容器。 重要的词有容器,而不是图像。 所以当你重build一个图像时,以前的容器仍在运行。 如果您停止并重新启动该容器,甚至停止该容器,其他容器仍在使用这些旧的安装点。 如果你停下来,删除旧的应用程序容器,并开始一个新的,旧的卷装载将仍然坚持到现在删除的容器。

在你的情况下解决这个问题的更好的方法是切换到命名卷并设置一个实用程序容器来更新这个卷。

 version: '2' volumes: app-data: driver: local services: web: image: nginx:latest depends_on: - app volumes: - ./site.conf:/etc/nginx/conf.d/default.conf - app-data:/app app: build: . volumes: - app-data:/app 

更新应用程序数据量的实用程序容器可能如下所示:

 docker run --rm -it \ -v `pwd`/new-app:/source -v app-data:/target \ busybox /bin/sh -c "tar -cC /source . | tar -xC /target" 

正如BMitch指出的,图像更新不会自动过滤到容器中。 您的更新工作stream程需要重新审视。 我刚刚经历了构build包含NGINX和PHP-FPM的容器的过程。 我发现,对我来说,最好的方法是将nginx和php包含在一个容器中,都由supervisordpipe理。 然后,我在图像中有脚本,允许您从git仓库更新代码。 这使得整个过程非常简单。

 #Create new container from image docker run -d --name=your_website -p 80:80 -p 443:443 camw/centos-nginx-php #git clone to get website code from git docker exec -ti your_website get https://www.github.com/user/your_repo.git #restart container so that nginx config changes take effect docker restart your_website #Then to update, after committing changes to git, you'll call docker exec -ti your_website update #restart container if there are nginx config changes docker restart your_website 

我的容器可以在https://hub.docker.com/r/camw/centos-nginx-php/finddockerfile和相关的构build文件可在https://github.com/CamW/centos-nginx-php

如果你想尝试一下,只需分叉https://github.com/CamW/centos-nginx-php-demo ,改变自述文件中指出的conf / nginx.conf文件,并包含你的代码。

这样做,你根本不需要处理卷,一切都在你喜欢的容器中。