确保给定的docker容器正在运行
我现在在相当多的服务器上使用docker,但有时我使用的一些容器会因为重载而崩溃。我曾考虑添加一个cron来检查容器是否每分钟都在运行,但我没有找到任何令人满意的方法确保给定的docker容器正在运行,docker,Docker,我现在在相当多的服务器上使用docker,但有时我使用的一些容器会因为重载而崩溃。我曾考虑添加一个cron来检查容器是否每分钟都在运行,但我没有找到任何令人满意的方法 我用一个保存正在运行的容器id的cidfile启动容器。如果容器崩溃,cidfile会留在那里,id在里面,我只是想知道你们如何确保容器正在运行或者没有运行,并且在它崩溃的情况下重新启动它。我应该只解析docker ps-a的输出,还是有更优雅的解决方案?答案有些深奥,但我找到了多种方法,从最优雅的开始: 在运行容器时为其命名,以
我用一个保存正在运行的容器id的cidfile启动容器。如果容器崩溃,cidfile会留在那里,id在里面,我只是想知道你们如何确保容器正在运行或者没有运行,并且在它崩溃的情况下重新启动它。我应该只解析docker ps-a的输出,还是有更优雅的解决方案?答案有些深奥,但我找到了多种方法,从最优雅的开始:
docker run-itd--name=testubuntu
upstart示例(/etc/init/test.conf
):
说明“我的测试容器”
启动文件系统并启动docker
在运行级别停止[!2345]
重生
剧本
/usr/bin/docker启动-测试
结束脚本
docker run-itd--name=test--cidfile=/tmp/cidfile\u路径ubuntu
一个小时一次的老太婆也许
#!/bin/bash
RUNNING=$(docker ps -a --no-trunc | awk '/test/ && /Up/' | awk '{print $1}')
CIDFILE=$(cat /tmp/cidfile_path)
if [ "$RUNNING" != "$CIDFILE" ]
then
# do something wise
fi
#!/bin/bash
RUNNING=$(docker inspect --format '{{.State.Running}}' test)
if [ "$RUNNING" == false ]
then
# do something wise
fi
您可以组合命令来执行任何您喜欢的检查脚本,我选择了
upstart
,因为它适合我的情况,但是如果您需要更多的控制,这些示例可以用于所有可能的场景。自docker 1.2.0版以来,有一个名为--restart
的run
命令的新开关,它会使任何外部工具或监控过时。由于编写本文时文档没有正确解释该功能,请阅读以了解详细信息。您知道是容器崩溃还是容器内启动的命令崩溃吗?如果是进程,您可以尝试通过supervisord启动它,这样它就会重新启动。内部的进程是通过supervisord启动的,但我相当确定这是容器崩溃,因为我必须在主机上重新启动整个docker守护进程,以便能够再次启动容器…啊!那看起来像个码头工人的臭虫。我会确保您运行最新的docker守护程序版本,并在github项目上打开一个问题,现在也得到了更新。