Estamos ejecutando Docker 1.7.1, compilación 786b29d en RHEL 6.7. Recientemente, hemos tenido varias ocasiones en las que el demonio docker se bloqueó y tuvimos que reiniciar la máquina para recuperarlo.

Un escenario típico es que un contenedor que ha estado funcionando bien durante semanas de repente comienza a generar errores. En algún momento podemos reiniciar el contenedor y todo está bien. Pero otras veces, todos los comandos de la ventana acoplable se bloquean y el reinicio del demonio falla, y veo esto en un ps:

4 Z root 4895 1 0 80 0 - 0 exit Aug23 ? 00:01:24 [docker]

Mirando en el registro del sistema, he visto esto:

device-mapper: ioctl: unable to remove open device docker-253:6-1048578-317bb6ad40cded3fbfd752d95551861c2e4ef08dffc1186853fea0e85da6b12b
INFO: task docker:16676 blocked for more than 120 seconds.
Not tainted 2.6.32-573.12.1.el6.x86_64 #1
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
docker D 000000000000000b 0 16676 1 0x00000080
ffff88035ef13ea8 0000000000000082 ffff88035ef13e70 ffff88035ef13e6c
ffff88035ef13e28 ffff88062fc29a00 0000376c85170937 ffff8800283759c0
0000000000000400 00000001039d40c7 ffff8803000445f8 ffff88035ef13fd8
Call Trace:
[] _mutexlock_slowpath+0x96/0x210
[] ? wake_up_process+0x15/0x20
[] mutex_lock+0x2b/0x50
[] sync_filesystems+0x26/0x150
[] sys_sync+0x17/0x40
[] system_call_fastpath+0x16/0x1b

La última versión de Docker es la 1.12.1 y estamos en la 1.7.1. ¿Puedo o debo instalar una nueva versión? 1.7.1 es la versión que instala yum. Si quisiera una nueva versión, ¿cómo la instalaría? (Lo siento si esa es una pregunta tonta, no soy un administrador de sistemas).

Buscando en Google, encontré esto en un sitio de Red Hat "Red Hat no recomienda ejecutar ninguna versión de Docker en ninguna versión de RHEL 6". Hemos estado ejecutando Docker en RHEL 6 durante algunos años, por lo que esto me confunde. Actualizar a RHEL 7 no es realmente una opción para nosotros en este momento.

¿Alguien puede arrojar algo de luz sobre este tema? Necesitamos que la ventana acoplable funcione de manera confiable sin tener que reiniciar a menudo.

1
Larry Martell 28 ago. 2016 a las 22:13

2 respuestas

La mejor respuesta

Docker 1.7.1 es realmente antiguo para los estándares actuales. Se han corregido cientos de errores, mejoras en las pilas de controladores, parches de seguridad y características valiosas agregadas en las versiones desde entonces. Parece que tiene un problema con su pila de almacenamiento y es muy probable que esto se solucione en una versión más reciente.

Docker ha declarado que las versiones predeterminadas en los sistemas de administración de paquetes como yum y apt pueden estar muy desactualizadas y que debe usar su repositorio. La mejor manera de hacer esto es agregar su información de repositorio de Yum a su sistema para que pueda instalarlo como otros paquetes. Las instrucciones están aquí: Instalación en Red Hat Enterprise Linux .

Nota: Esto le permitirá instalar Docker y el servicio se llamará docker, pero el paquete es docker-engine. Esto ha confundido a algunas personas en el pasado.

yum install docker-engine

Docker también ha proporcionado un script que hace esto para facilitar las cosas (ejecutar como administrador / root):

curl -fsSL https://get.docker.com/ | sh
1
DevOps Dan 28 ago. 2016 a las 23:59

No utilice un sistema basado en RHEL6.

RHEL6 usa un kernel 2.6 con correcciones backportadas para mantener Docker funcionando. Docker normalmente requeriría un kernel 3.10+. Docker eliminó la compatibilidad con RHEL6 a partir de la v1.8, por lo que es poco probable que haya más paquetes para él.

Si debe utilizar RHEL6, no utilice el mapeador de dispositivos de bucle invertido predeterminado para el almacenamiento. Configure un grupo delgado LVM para que lo use Docker.

1
Community 23 may. 2017 a las 12:13