我正在为一个生产PHP-FPM/Nginx应用程序运行docker,我想使用docker-stack.yml并部署到swarm集群。这是我的文件:
version: "3"
services:
app:
image: <MYREGISTRY>/app
volumes:
- app-data:/var/www/app
deploy:
mode: global
php:
image: <MYREGISTRY>/php
volumes:
- app-data:/var/www/app
deploy:
replicas: 2
nginx:
image: <MYREGISTRY>/nginx
depends_on:
- php
volumes:
- app-data:/var/www/app
deploy:
replicas: 2
ports:
- "80:80"
volumes:
app-data:我的代码在app容器中,带有注册表中的图像。
我想用docker service update --image <MYREGISTRY>/app:latest更新我的代码,但是它不工作,代码没有改变。我猜它使用的是本地卷app-data。
新容器数据不覆盖卷数据正常吗?
发布于 2018-03-08 09:04:21
我有同样的问题,我有应用程序和nginx容器共享相同的卷。我当前的解决方案有一个部署脚本,它运行
docker service update --mount-add mount service用于部署docker stack之后的app和nginx。它将强制更新app和nginx容器的卷。
发布于 2017-03-15 08:41:17
是的,这是预期的行为。仅当命名卷为空(首次创建时的默认状态)时,才会将其初始化为映像内容。在该时间点之后的任何时间更新卷都有可能会因为覆盖或删除您显式要求保留的卷数据而丢失数据。
如果您需要使用每个新映像更新文件,那么它们可能不应该放在卷中?如果在卷中确实需要这些,则可能需要创建一个从映像更新卷的过程,例如,如果这是一个docker run,您可以执行以下操作:
docker run -v app-data:/target --rm <your_registry>/app cp -a /var/www/app/. /target/.否则,您可以删除卷,或简单地删除卷中的所有文件,然后重新启动堆栈以重新填充它。
https://stackoverflow.com/questions/42798854
复制相似问题