在docker swarm堆栈中重新启动一项服务

twe*_*200 55 docker docker-compose docker-swarm

有没有人知道是否有办法让docker swarm重新启动一个服务,这是一个堆栈的一部分而不重新启动整个堆栈?

Mat*_*att 69

docker stack deploy再次为我做的是更新服务的方法.正如Francois的回答,以及我自己的经验,这样做只会更新需要更新的服务.

但有时候,测试东西只重新启动单个服务似乎更容易.在我的情况下,我必须清除卷并更新服务以启动它,就像它是新鲜的.我不确定我将描述的方法是否有缺点.我在我的开发堆栈上测试了它,它对我很有用.

获取要拆除的服务ID,然后使用docker service update --force <id>强制更新服务,从而有效地重新部署它

$ docker stack services <stack_name>
ID                  NAME              ...
3xrdy2c7pfm3        stack-name_api    ...

$ docker service update --force 3xrdy2c7pfm3
Run Code Online (Sandbox Code Playgroud)

--force标志将强制服务更新,导致它重新启动.


Luk*_*e W 49

缩放为0并备份:

docker service scale myservice=0
docker service scale myservice=10
Run Code Online (Sandbox Code Playgroud)

  • 这是唯一一个真正强制重启的。谢谢! (3认同)

Fra*_*rel 10

docker stack文档:

扩展说明

从群组上的compose或dab文件创建和更新堆栈

这篇博客文章:docker stack以类似的方式工作docker compose.它是幂等的.如果已经部署了堆栈,docker stack deploy则将仅重新启动具有更新的摘要或标记的服务:

码头工人堆栈过程

根据我的经验,当我再次部署相同的堆栈并更改一个服务时,只会重新启动更新的服务.

但是......对于考虑到的更改似乎有一些限制(有些报告带有图像标记的错误),所以试一试,看看是否按预期工作.

service update如果您希望确保只有目标服务(如果已更新更新),您也可以使用.

您也可以参考这个类似的SO QA.