重新启动docker swarm堆栈中的一个服务

重新启动docker swarm堆栈中的一个服务,docker,docker-compose,docker-swarm,Docker,Docker Compose,Docker Swarm,有人知道有没有办法让docker swarm在不重新启动整个堆栈的情况下重新启动作为堆栈一部分的服务?查看文档: 扩展描述 从swarm上的compose或dab文件创建并更新堆栈 From:docker-stack的工作方式与docker-compose类似。它是幂等的。如果堆栈已部署,docker stack deploy将仅重新启动具有已更新摘要或标记的服务: 根据我的经验,当我在一个服务发生更改的情况下再次部署相同的堆栈时,只有更新的服务才会重新启动 但是…考虑到的更改(一些报告)似乎

有人知道有没有办法让docker swarm在不重新启动整个堆栈的情况下重新启动作为堆栈一部分的服务?

查看文档:

扩展描述

从swarm上的compose或dab文件创建并更新堆栈

From:
docker-stack
的工作方式与
docker-compose
类似。它是幂等的。如果堆栈已部署,
docker stack deploy
将仅重新启动具有已更新摘要或标记的服务:

根据我的经验,当我在一个服务发生更改的情况下再次部署相同的堆栈时,只有更新的服务才会重新启动

但是…考虑到的更改(一些报告)似乎有一些限制,所以请尝试一下,看看是否能按预期工作

如果您希望确保仅在使用更改进行更新时才使用目标服务,则也可以使用


.

对我来说,再次执行
docker stack deploy
是更新服务的方法。根据我自己的经验,这样做只会更新需要更新的服务

但有时,在测试东西时只重启一个服务似乎更容易。在我的情况下,我必须清除卷并更新服务,才能像启动新服务一样启动它。我不确定我将描述的方法是否有缺点。我在我的开发堆栈上测试了它,它对我来说非常有效

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

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

$ docker service update --force 3xrdy2c7pfm3
$docker堆栈服务
身份证名称。。。
3xrdy2c7pfm3堆栈名称\u api。。。
$docker服务更新--强制3xrdy2c7pfm3

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

缩放到0并备份:

docker service scale myservice=0
docker service scale myservice=10
删除它:

docker stack rm stack_name
重新部署it:

docker stack deploy -c docker-compose.yml stack_name
根据滚动更新中的示例:

$docker服务更新--图像redis:3.0.7 redis

但是,只有当您的映像已经在本地计算机上时,这才有效。如果没有,则需要使用--with registry auth将注册表身份验证详细信息发送给swarm代理。详情请参阅

$docker服务更新--使用注册表验证--图像redis:3.0.7 redis


谢谢,这确实像预期的那样有效。我实际上希望以滚动的方式强制重新启动一个特定的服务(或整个堆栈)。不幸的是,我处理的一些服务存在缓存失效问题,我们发现需要删除/重新部署到堆栈以强制更新。查看
服务更新
文档,如果没有内置方式,我可以添加/删除
env
变量来伪造它。我只是在寻找同样的东西-在文档中找不到任何东西。我只是遇到了以下问题:
docker stack deploy
不会启动服务(openldap)。我找不到日志文件<代码>docker compose运行将毫无问题地启动容器。最后,
docker服务更新--force
确实有效。这是唯一一个真正强制重新启动的。谢谢同意,只是强制更新并没有为我重新启动服务,不知道为什么这个方法似乎停止了服务,但不知何故,服务仍然潜伏在野兽的内心深处。例如,当我缩小服务规模并尝试旋转另一个使用相同端口的服务时,我得到了“端口已在使用中”。上面接受的答案是有效的,并且以滚动的方式进行,以避免停机