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

时间:2017-06-28 20:21:23

标签: docker docker-compose docker-swarm

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

5 个答案:

答案 0 :(得分:51)

再次为我做docker stack deploy是更新服务的方法。作为Francois' Answer,同样根据我自己的经验,这样做只会更新需要更新的服务。

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

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

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

$ docker service update --force 3xrdy2c7pfm3

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

答案 1 :(得分:35)

缩放为0并备份:

docker service scale myservice=0
docker service scale myservice=10

答案 2 :(得分:8)

查看docker stack文档:

  

扩展说明

     

从群组中的撰写或dab文件创建并更新堆栈

来自this blog articledocker stack的工作方式与docker compose类似。这是幂等。如果已经部署了堆栈,docker stack deploy将仅重启那些具有更新的摘要或标记的服务:

docker stack process

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

但是...... 似乎对所考虑的更改存在一些限制(某些报告bugs with image tags),因此请尝试一下,看看是否按预期工作。< / p>

如果您希望确定只有目标服务更新后才能使用service update

You can also refer to this similar SO QA

答案 3 :(得分:0)

按照documentation中用于滚动更新的示例:

$ docker服务更新--image redis:3.0.7 redis

但是,仅当您的映像已经在本地计算机上时,此方法才有效。如果不是,那么您需要使用--with-registry-auth将注册表身份验证详细信息发送到swarm代理。在docker service update documentation.

中查看详细信息

$ docker服务更新--with-registry-auth --image redis:3.0.7 redis

答案 4 :(得分:-1)

删除它:

docker stack rm stack_name

重新部署它:

docker stack deploy -c docker-compose.yml stack_name