假设我有几个使用swarm定义的docker服务,如下所示:服务包括服务器,数据库和日志。我充分利用了docker swarm提供的网络抽象,但是我的失败案例有点不讲究Docker。关闭或不可用*。有内置的方法可以完成此任务吗?堆栈的概念是否以单个服务可以访问的方式存在?容器故障”?因为我假设没有办法完全按照我的要求进行。

评论

您可以删除多余的标签吗?根据我的说法,这个问题是关于docker-swarm的,而不是关于docker和docker-compose的。

#1 楼

如果您不希望容器重新启动,则可以将condition:设置为none。请参阅https://docs.docker.com/compose/compose-file/#restart_policy

在群集管理器上,您可以使用docker stack ps定期检查容器的状态并关闭如果数据库容器未运行(使用cron或其他工具),则返回堆栈。例如:

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

如果容器无法重新启动,则一旦出现故障,容器就不应出现在列表中,一旦找不到,就可以卸下堆栈。

#2 楼

使用Docker的healthcheck功能(附加脚本的辅助过程),您可以注册容器健康状态并将其与外部服务同步,例如领事。然后,此服务的API将允许其他服务采取某些措施,例如,正如您所说的那样,重新部署整个堆栈或引发问题。