docker - technology - it consul
Contenedor Docker con estado "Muerto" después de que el cónsul healthcheck se ejecute (2)
Actualización de marzo de 2016: el número 9665 acaba de cerrarse por PR 21107 (posiblemente para Docker 1.11)
Eso debería ayudar a evitar el problema "El controlador no pudo eliminar el sistema de archivos raíz", el "dispositivo o recurso ocupado".
Respuesta original mayo de 2015
Dead es uno si el contenedor indica , que es probado por Container.Start()
if container.removalInProgress || container.Dead {
return fmt.Errorf("Container is marked for removal and cannot be started.")
}
Se establece como Dead cuando se detiene , para evitar que el contenedor se reinicie.
Entre las posibles causas de falla, vea container.Kill()
.
Significa kill -15
y kill -9
, ambos están fallando.
// 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 {
Eso generalmente significa, como menciona el OP, un dispositivo o recurso ocupado, lo que impide que se mate el proceso.
Estoy usando la característica de chequeo de salud del cónsul, y sigo obteniendo estos contenedores "muertos":
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
20fd397ba638 progrium/consul:latest "/"/bin/bash -c ''cur 15 minutes ago Dead
¿Qué es exactamente un contenedor "Muerto"? ¿Cuándo un contenedor detenido se convierte en "Muerto"?
Para el registro, ejecuto progrium / consul + gliderlabs / registrator images + SERVICE_XXXX_CHECK variables env para hacer la verificación de estado. Ejecuta un script de comprobación de estado que ejecuta una imagen cada X segundos, algo así como docker run --rm my/img healthcheck.sh
Me interesa en general lo que significa "muerto" y cómo evitar que suceda. Otra cosa peculiar es que mis contenedores muertos no tienen nombre.
esta es alguna información de la inspección del contenedor:
"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"
},
Lo extraño es que solo de vez en cuando un contenedor se vuelve muerto y no se elimina.
Gracias
Editar: Al mirar los registros, encontré lo que hace que el contenedor pare de fallar:
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
¿Por qué pasó esto?
edit2: encontré esto: https://github.com/docker/docker/issues/9665
Hay muchos errores causados por EBUSY
, en particular cuando se usa devicemapper
.
Existe un error de seguimiento para todos los EBUSY
relacionados con EBUSY
. ver https://github.com/docker/docker/issues/5684#issuecomment-69052334