确保给定的docker集装箱正在运行
我现在在相当多的服务器上使用docker,但是有时候我使用的一些容器会因重负载而崩溃。 我正在考虑添加一个cron来检查容器的每一分钟是否正在运行,但我没有find任何令人满意的方法来做到这一点。
我用一个保存运行容器的id的cidfile启动容器。 如果容器崩溃了,cidfile就停留在里面,我只是想知道你们是如何确定一个容器正在运行或者没有运行的,并且在发生故障的情况下重新生成。 我应该只parsingdocker ps -a
的输出还是有更优雅的解决scheme?
由于docker版本1.2.0有一个新的开关run
命令叫--restart
应该使任何外部工具或监视过时。 由于文档没有正确解释本文撰写时的function,请阅读公告的博客文章以了解详细信息。
答案在某种程度上深藏不露,但是我发现了以最优雅的方式开始的多种方式:
-
运行时命名容器,以便您可以附加到进程日志logging,并将其与进程监视器(如upstart / systemd / supervisord
docker run -itd --name=test ubuntu
新贵的例子(
/etc/init/test.conf
):description "My test container" start on filesystem and started docker stop on runlevel [!2345] respawn script /usr/bin/docker start -a test end script
-
较不优雅:观察cidfile内容的变化
docker run -itd --name=test --cidfile=/tmp/cidfile_path ubuntu
每小时cron可能…
#!/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
-
与上面类似,你可以看到一个给定的容器是否正在运行…在一个循环/ cron /无论
#!/bin/bash RUNNING=$(docker inspect --format '{{.State.Running}}' test) if [ "$RUNNING" == false ] then # do something wise fi
你可以结合使用命令来执行你喜欢的任何脚本,因为它适合我的情况,所以我喜欢upstart
,但是如果你需要更多的控制,这些例子可以用于所有可能的场景。