我在使用Docker Compose时遇到了一个问题,当镜像被更改时,卷的内容不会更新。下面是我的 docker-compose.yml的简化版本:
services:
app:
image: docker/image:66
# ... other configurations ...
volumes:
- app:/var/www/html
# ... other configurations ...
webserver:
image: nginx:alpine
# ... other configurations ...
volumes:
- app:/var/www/html
# ... other configurations ...
volumes:
app:
字符串
当我将docker/image:66更改为不同的版本,然后运行docker-compose up -d时,问题就出现了。卷(app:/var/www/html)的内容没有反映新镜像的更改。
我知道卷是缓存的,停止容器并手动删除镜像可以解决这个问题。但是,我相信应该有一种更有效的方法来处理这个问题,而无需手动干预。
我已经尝试为每个服务分离卷,并使用带有外部驱动程序的命名卷,但问题仍然存在。是否有推荐的方法来确保卷在映像更改时自动更新,而无需手动步骤?
任何见解或建议将不胜感激。
1条答案
按热度按时间rdrgkggo1#
完全删除
volumes:
。volumes:
挂载总是用命名卷的内容替换镜像的内容。除了第一次使用时的一个例外,没有任何东西会复制到命名卷中。正如你在这里看到的,卷不是从一个容器到另一个容器共享内容的可靠路径。在你的代理容器中,我建议你构建一个单独的镜像,里面内置了你需要提供服务的任何静态资产。最重要的是你是否可以将静态文件服务委托给应用程序容器,所以你可能需要一个带有
proxy_pass
行的Nginx配置,但根本不需要应用程序特定的文件。如果你的应用程序框架不支持静态文件服务,那么你可以构建一个简单的镜像字符串
在Compose文件中,您可以使用变量替换来避免重复图像标记。
型