强制有问题的docker容器重新启动?

我经常遇到一些我们的docker容器应用程序的问题,简单的修复是重新启动docker容器。 不幸的是,这是一个手动过程,我们已经打破了function,直到我们发现哪个容器有问题,需要重新启动。 这有我想知道是否有一个很好的技术,在某些情况下自动重启docker集装箱?

现在我想到了--autorestart标志的组合,并在遇到已知问题时强制应用程序closures。 但是,我不确定这是否是最好的方法。

如果你的应用程序能够检测到问题,你可以很容易地重新启动容器。 两个重要的事情是--restart标志,并且在检测到问题时应用程序存在。

在后台启动容器( -d )并设置重启策略 :
docker run --restart unless-stopped -d [IMAGE] [COMMAND]

使用重新启动策略,您可以控制Docker在命令存在时执行的操作。 使用--restart unless-stopped可以让Docker始终重新启动该命令,而不pipe该命令的退出代码是什么。 这样,您可以让您的应用程序检查其健康状况,并在必要时使用exit(1)或类似的关机。 当发生这种情况时,Docker将遵循其重新启动策略并启动一个新的容器。

尽pipeDocker并不关心返回代码,但我会确保应用程序存在的状态码不是0来表示问题。 如果您想要分析日志或使用脚本中的容器,以后这可能会很有用。

编辑:

我最初使用--restart always在答案,但经过一些考虑,我认为可能会更好使用--restart unless-stopped在这里。 它的行为是更可预测的,因为docker stop确实停止服务。 使用--restart always--restart always docker stop将停止容器,但是再次启动一个新的容器,这不一定是你想要或预期发生的。

您可以使用下一个命令重新启动容器:

 docker restart $container