Docker容器,状态为“;“死亡”;领事健康检查之后

Docker容器,状态为“;“死亡”;领事健康检查之后,docker,consul,Docker,Consul,我正在使用Concur的healthcheck功能,我不断得到这些“死”容器: CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS

我正在使用Concur的healthcheck功能,我不断得到这些“死”容器:

CONTAINER ID  IMAGE                   COMMAND              CREATED         STATUS              PORTS                                                                                                                                                                    NAMES
20fd397ba638  progrium/consul:latest  "\"/bin/bash -c 'cur 15 minutes ago  Dead
什么是“死”容器?什么时候停止的容器会“死亡”

为了记录,我运行progrium/consul+gliderlabs/registrator images+SERVICE\u XXXX\u CHECK env variables来进行健康检查。它每隔X秒运行一个运行图像的healthcheck脚本,类似于
docker run--rm my/img healthcheck.sh

我对“死亡”的一般含义以及如何防止它发生感兴趣。另一件奇怪的事是,我的死容器没有名字

以下是集装箱检验的一些信息:

  "State": {
        "Dead": true,
        "Error": "",
        "ExitCode": 1,
        "FinishedAt": "2015-05-30T19:00:01.814291614Z",
        "OOMKilled": false,
        "Paused": false,
        "Pid": 0,
        "Restarting": false,
        "Running": false,
        "StartedAt": "2015-05-30T18:59:51.739464262Z"
    },
奇怪的是,只是偶尔会有一个容器死掉而没有被移除

多谢各位

编辑: 查看日志,我发现是什么导致容器停止失败:

  Handler for DELETE /containers/{name:.*} returned error: Cannot destroy container 003876e41429013e46187ebcf6acce1486bc5011435c610bd163b159ba550fbc: 
Driver aufs failed to remove root filesystem 003876e41429013e46187ebcf6acce1486bc5011435c610bd163b159ba550fbc: 
rename /var/lib/docker/aufs/diff/003876e41429013e46187ebcf6acce1486bc5011435c610bd163b159ba550fbc 
/var/lib/docker/aufs/ diff/003876e41429013e46187ebcf6acce1486bc5011435c610bd163b159ba550fbc-removing: 
device or resource busy
为什么会发生这种情况

编辑2: 发现此消息:

2016年3月更新:刚刚被关闭(对于docker 1.11可能)
这将有助于避免“驱动程序aufs无法删除根文件系统”、“设备或资源繁忙”问题


原始答复2015年5月

死亡是一个如果,这是由测试

这是为了防止容器重新启动

在故障的可能原因中,.
这意味着
kill-15
kill-9
都失败了

// 1. Send a SIGTERM
if err := container.killPossiblyDeadProcess(15); err != nil {
    logrus.Infof("Failed to send SIGTERM to the process, force killing")
    if err := container.killPossiblyDeadProcess(9); err != nil {

正如OP所提到的,这通常意味着一个繁忙的设备或资源,阻止进程被终止。

有许多由
EBUSY
引起的错误,特别是在使用
deviceapper

所有与
EBUSY
相关的问题都存在跟踪器错误。
参见

查看代码,我去寻找日志,发现了一些东西。我刚刚编辑了主要内容question@TrustNoOne的确我已经添加了试图发送终止信号的代码部分。好吧,我想这个“设备忙”问题还没有解决方案,票证仍然是开放的和活动的。我会看看其他人是否有话要说,然后接受你的回答,因为它基本上解释了什么是“死亡”。
// 1. Send a SIGTERM
if err := container.killPossiblyDeadProcess(15); err != nil {
    logrus.Infof("Failed to send SIGTERM to the process, force killing")
    if err := container.killPossiblyDeadProcess(9); err != nil {