首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker堆栈部署滚动更新卷问题

Docker堆栈部署滚动更新卷问题
EN

Stack Overflow用户
提问于 2017-03-15 08:08:04
回答 2查看 1.8K关注 0票数 6

我正在为一个生产PHP-FPM/Nginx应用程序运行docker,我想使用docker-stack.yml并部署到swarm集群。这是我的文件:

代码语言:javascript
复制
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

新容器数据不覆盖卷数据正常吗?

EN

回答 2

Stack Overflow用户

发布于 2018-03-08 09:04:21

我有同样的问题,我有应用程序和nginx容器共享相同的卷。我当前的解决方案有一个部署脚本,它运行

代码语言:javascript
复制
docker service update --mount-add mount service

用于部署docker stack之后的app和nginx。它将强制更新app和nginx容器的卷。

票数 3
EN

Stack Overflow用户

发布于 2017-03-15 08:41:17

是的,这是预期的行为。仅当命名卷为空(首次创建时的默认状态)时,才会将其初始化为映像内容。在该时间点之后的任何时间更新卷都有可能会因为覆盖或删除您显式要求保留的卷数据而丢失数据。

如果您需要使用每个新映像更新文件,那么它们可能不应该放在卷中?如果在卷中确实需要这些,则可能需要创建一个从映像更新卷的过程,例如,如果这是一个docker run,您可以执行以下操作:

代码语言:javascript
复制
docker run -v app-data:/target --rm <your_registry>/app cp -a /var/www/app/. /target/.

否则,您可以删除卷,或简单地删除卷中的所有文件,然后重新启动堆栈以重新填充它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42798854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档