如何在容器故障时关闭Docker Stack

104次阅读
没有评论

问题描述

在使用Docker Swarm部署了多个服务,如serverdatabaselogs。他希望在database服务中的所有容器发生故障时,能够关闭整个Docker Stack或使其不可用。用户询问是否有内置的方法来实现这个任务。他还想了解是否存在一种方式,让各个服务能够访问到Docker Swarm提供的网络抽象。此外,用户还提出了一个一般性的问题:”如何使用内置的Docker功能来感知容器故障”,因为他认为可能没有直接满足他需求的方法。

解决方案

请注意以下操作可能涉及Docker Swarm和Docker Compose版本的差异,建议做好备份操作。

使用condition属性控制容器的重启策略

如果不想让容器自动重启,可以设置容器的condition属性为none。详情参考Docker Compose Restart Policy

使用docker stack ps检测容器状态并关闭Stack

在Swarm管理器上,你可以使用docker stack ps命令定期检查容器的状态,如果database容器未运行(使用cron或其他方式),则关闭整个Stack。例如:

docker stack ps --filter "desired-state=Running" your-stack | grep database || docker stack rm your-stack

如果容器无法重新启动,它们在故障后不应出现在列表中,一旦找不到任何容器,就可以删除Stack。

使用健康检查和外部服务来控制操作

可以使用Docker的健康检查功能,注册并同步容器的健康状态到外部服务,例如Consul。该外部服务的API可以允许其他服务执行一些操作,比如重新部署整个Stack或发出警告。

综上所述,你可以根据具体需求选择合适的方法来实现在database服务中的所有容器故障时关闭整个Docker Stack的需求。这些方法在不同情况下都有各自的优缺点,你可以根据你的具体场景选择适合的方式。

正文完