更新后,docker stack deploy会留下旧服务

时间:2018-01-22 16:34:30

标签: docker docker-swarm

我已经使用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上 - 或者我之前没有注意到 - 相反的是旧服务有时没有被正确停止。< / p>

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

对于已复制服务的群组,以及使用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>甚至会锁定,只是坐在那里。

我发现摆脱它们的唯一方法是重启节点。由于复制,我实际上可以在没有停机的情况下做到这一点,但由于各种原因它并不是很好,其中最少的是如果另外一位经理在我这样做的时候会崩溃的话。

还有其他人看过这种行为吗?可能是什么原因以及如何调试?

0 个答案:

没有答案