Контейнер-докер со статусом "Мертвый" после запуска программы consul healthcheck

Я использую функцию consul 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 + SERVICE_XXXX_CHECK env для проверки работоспособности. Он запускает проверку работоспособности script, запуская изображение каждые X секунд, что-то вроде 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

Почему это происходит?

edit2: нашел это: https://github.com/docker/docker/issues/9665

Ответы

Ответ 1

Обновление в марте 2016 года: проблема 9665 только что была закрыта PR 21107 (для докера 1.11 возможно)
Это должно помочь избежать проблемы с драйвером "aufs", чтобы не удалять корневую файловую систему "," проблема с устройством или ресурсом ".


Оригинальный ответ май 2015 г.

Мертвый - это один, если состояния контейнера, который проверяется Container.Start()

if container.removalInProgress || container.Dead {
        return fmt.Errorf("Container is marked for removal and cannot be started.")
}

установить Dead при прекращении остановки, чтобы предотвратить перезапуск этого контейнера.

Среди возможной причины сбоя см. container.Kill().
Это означает, что 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, занятое устройство или ресурс, препятствующий уничтожению процесса.

Ответ 2

Есть много ошибок, вызванных EBUSY, в частности, когда используется devicemapper.

Существует ошибка отслеживания всех связанных с EBUSY проблем. см. https://github.com/docker/docker/issues/5684#issuecomment-69052334