Контейнер Docker со статусом "Dead" после запуска проверки работоспособности консула

Я использую функцию проверки здоровья консула, и я продолжаю получать эти" мертвые " контейнеры:

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_XXXX_CHECK env переменные для проверки работоспособности. Он запускает скрипт выполняется анализ изображения каждые 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"
    },

странно то, что только время от времени контейнер становится мертвым и не удаляется.

спасибо

изменить: Глядя на журналы, я обнаружил, что делает остановку контейнера fail:

  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

2 ответов


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


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

мертв один, если контейнер государств, который проверен Container.Start()

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

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

среди возможных причин отказа, посмотреть 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, занятое устройство или ресурс, предотвращающий процесс, который должен быть убит.


есть много ошибок, вызванных,EBUSY в частности, когда есть.

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