gpt4 book ai didi

php - 重建后文件更改未反射(reflect)在Docker镜像中

转载 作者:行者123 更新时间:2023-12-02 21:26:13 39 4
gpt4 key购买 nike

我正在尝试为NGINX代理的我的PHP Web应用程序(php-fcm)设置两个Docker镜像。理想情况下,我希望将Web应用程序的所有文件复制到基于php-fcm的镜像中并作为卷公开。这样,容器(Web和应用程序)都可以使用NGINX提供的静态文件和php-fcm解释php文件来访问文件。

docker-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

新文件未在生成的图像中拾取。尽管有以下消息表明该镜像确实正在重建,但这仍然是:
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'选项将卷从一个容器装载到另一个容器。重要的词是容器,而不是图像。因此,当您重建镜像时,先前的容器仍在运行。如果停止并重新启动该容器,或者甚至只是停止它,则其他容器仍在使用那些旧的安装点。如果停止,请删除旧的应用程序容器,然后启动一个新的应用程序容器,旧的卷装载仍将保留到现在已删除的容器中。

解决这种情况的更好方法是切换到命名卷并设置实用程序容器以更新该卷。

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"

关于php - 重建后文件更改未反射(reflect)在Docker镜像中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37781103/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com