如何在群集模式下停止/启动泊坞窗容器而不删除?

时间:2017-08-03 09:35:28

标签: linux docker docker-swarm

我是docker swarm模式的新手。如你所知,可以启动/停止docker容器,但我认为不可能在swarm中执行此操作  例如,我已经部署了swarm并使用副本(2/2)创建了新任务:

docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE                                                                               PORTS
2o3a6z30q9df        contactactivity     replicated          2/2                 myimage/live-springboot-myservice:19ff0be1f0087asd1dasdb52c345151e9985b4a5a2   *:111->1111/tcp

是否可以在不移除它的情况下停止其中一个群集容器并在将来将其恢复?

P.S。我只是想澄清删除或重新创建 - 在我的情况下不是选项。

使Q清楚:  如果你停止容器然后开始 - 这个容器不会成为群的一部分。我无法相信在群集模式下无法进行简单的重启或启动/停止。

3 个答案:

答案 0 :(得分:2)

列出为服务运行的容器&阻止他们 例如 docker ps | grep service-name 然后使用上面的命令{/ 1}}停止容器。

docker stop <ID>

如果要停止所有容器,则只需将服务缩小为0 如下 OR 用它们带回来 docker service scale servicename=0

答案 1 :(得分:0)

我自己也觉得很奇怪,但显然 docker swarm 想要的方法是删除服务,然后从堆栈或命令行重新部署它。此外,如果服务是全局的,并在失败时重新启动策略并且容器被终止,则它的两个实例将存在(但如果它被正常停止则不会)。

答案 2 :(得分:-1)

不,这不可能是“开箱即用”的,即使您设法以某种艰难的方式做到这一点,也与Docker Swarm方法完全相反。

您尝试执行的步骤是典型的(手动)操作步骤:使用Swarm,您需要协调器(UCP,管理器节点中的逻辑)进行这种操作。

每当它决定执行一个新任务时,它就会启动一个容器实例,它始终是一个新的启动容器。 这有两个结果,这是docker最佳实践,也许一起可以解决您的问题:

  • 您希望您的容器尽快启动
  • 如果容器内部有某些东西您害怕丢失或需要很长时间才能创建/收集,只需将其保留在容器本身之外(例如,在共享的Docker卷中,新创建的容器将在启动时找到准备就绪的容器) )