确保给定的docker集装箱正在运行

我现在在相当多的服务器上使用docker,但是有时候我使用的一些容器会因重负载而崩溃。 我正在考虑添加一个cron来检查容器的每一分钟是否正在运行,但我没有find任何令人满意的方法来做到这一点。

我用一个保存运行容器的id的cidfile启动容器。 如果容器崩溃了,cidfile就停留在里面,我只是想知道你们是如何确定一个容器正在运行或者没有运行的,并且在发生故障的情况下重新生成。 我应该只parsingdocker ps -a的输出还是有更优雅的解决scheme?

由于docker版本1.2.0有一个新的开关run命令叫--restart应该使任何外部工具或监视过时。 由于文档没有正确解释本文撰写时的function,请阅读公告的博客文章以了解详细信息。

答案在某种程度上深藏不露,但是我发现了以最优雅的方式开始的多种方式:

  1. 运行时命名容器,以便您可以附加到进程日志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

  2. 较不优雅:观察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 
  3. 与上面类似,你可以看到一个给定的容器是否正在运行…在一个循环/ cron /无论

     #!/bin/bash RUNNING=$(docker inspect --format '{{.State.Running}}' test) if [ "$RUNNING" == false ] then # do something wise fi 

你可以结合使用命令来执行你喜欢的任何脚本,因为它适合我的情况,所以我喜欢upstart ,但是如果你需要更多的控制,这些例子可以用于所有可能的场景。