gpt4 book ai didi

docker stack deploy 在更新后留下旧服务

转载 作者:行者123 更新时间:2023-12-04 12:01:20 25 4
gpt4 key购买 nike

我一直在使用 start-first 将堆栈部署到集群中选择了很长一段时间。

所以给出以下 api.yml文件:

version: '3.4'

services:

api:
image: registry.gitlab.com/myproj/api:${VERSION}
deploy:
update_config:
order: start-first

我会针对群管理器运行以下命令:
env VERSION=x.y.z docker stack deploy -f api.yml api

这工作得很好 - 旧服务一直为请求提供服务,直到新服务完全可用。只有这样它才会被拆除并进入关机状态。

最近,我相信这开始发生在 docker v17.12.0-ce 或 v18.01.0-ce - 或者我之前没有注意到 - 相反发生的是旧服务有时没有正确停止。

当这种情况发生时,它会挂起并继续服务请求,导致我们无限期地并排运行新旧版本。

这既发生在复制了服务的集群上,也发生在使用 scale=1 运行它的集群上。 .

更糟糕的是,我什至无法杀死旧容器。这是我尝试过的:
  • docker service rm api_api
  • docker stack rm api && docker stack deploy -f api.yml api
  • docker rm -f <container id>

  • 没有什么能让我摆脱“僵尸”容器。事实上 docker rm -f <container id>甚至锁上,只是坐在那里。

    我发现摆脱它们的唯一方法是重新启动节点。多亏了复制,我实际上可以在不停机的情况下做到这一点,但由于各种原因,这不是很好,其中最重要的是如果另一位经理在我这样做时停机可能会发生什么。

    有没有其他人看到过这种行为?可能是什么原因,我该如何调试?

    最佳答案

    尝试设置 max_replicas_per_node (如果每个节点只需要一个副本,则为 1)在 placement 中部分
    引用 https://docs.docker.com/compose/compose-file/compose-file-v3/

    关于docker stack deploy 在更新后留下旧服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48386240/

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