在Swarm模式下使用Compose文件的Docker堆栈"--force-recreate"

6
在Docker Swarm模式下,是否可以使用compose文件强制重新创建容器?(我已经知道可以在Dockerfile中使用HEALTHCHECK)
目前,我必须先删除堆栈,然后再部署它 - $ docker stack deploy -c stg-sm-deploy-compose.yml --with-registry-auth MY-APP $ docker stack rm MY-APP $ docker stack deploy -c stg-sm-deploy-compose.yml --with-registry-auth MY-APP
有没有可能用以下命令替换上述3个命令 - $ docker stack deploy -c stg-sm-deploy-compose.yml --with-registry-auth MY-APP --force-recreate
3个回答

12

对于在该堆栈内创建且未更改的任何服务,您可以使用:

docker service update --force $service

这将强制执行该服务的滚动更新。

要从堆栈重新创建所有内容,请在以下位置输入您的堆栈名称作为$stack

docker stack services -q $stack \
  | while read service; do
    docker service update --force $service
  done

非常感谢 @BMitch 的指导和帮助。只是有一个小修正,docker 不再支持 "-f" 标志,我们必须使用 "--force"。在我的情况下,工作命令是 docker service update --force MY-APP_nginx - vivekyad4v
2
谢谢纠正。这就是我从记忆中回答的结果,他们可能从来没有使用过-f作为强制标志,因为在其他命令中它也是格式和过滤器的短标志。 - BMitch
如果我更改了compose文件的内容,使用docker service update --force $service更新服务时,会考虑此服务的新配置吗? - papillon
1
@papillon,不,你在这个命令中没有提供一个compose文件,它甚至不是一个stack命令。你只是替换了已部署服务中的容器。 - BMitch

3
我们可以在Swarm模式下强制重新创建compose文件中定义的特定服务 -
  1. 获取服务名称 -

    $ docker service ls

  2. 强制更新/重新创建 -

    $ docker service update --force MY-APP_nginx

    其中 "nginx" 是Compose文件中定义的服务名称,而 "MY-APP" 是堆栈的名称。


1
@BMitch的回答的扩展,少了一点shell语言。
$ docker stack services -q $stack \
  | xargs -rt -n1 -- docker service update --force
...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接