¿Por qué la versión del kernel no coincide con la versión de Ubuntu en un contenedor Docker?

11

Tengo un contenedor Docker construido a partir de Ubuntu 14.10. Cuando inicio sesión en el contenedor para verificar la versión de Ubuntu y la versión del kernel, veo lo siguiente:

root@~$>> lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.10
Release:    14.10
Codename:   utopic   

root@~$>> uname -a
    Linux ambiata-aws 3.13.0-24-generic #47-Ubuntu SMP Fri May 2 23:30:00 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

Pensé que se suponía que Ubuntu 14.10 era la versión 3.16 del núcleo (como se indica aquí ), entonces, ¿por qué tengo la versión 3.13.0-24-genérica del núcleo?

La razón por la que pregunto es porque hay un parche en 3.13.0-29-genérico que me gustaría tener (es decir, que Fallocate funcione en AUFS en mi contenedor acoplable) que se discute aquí .

jcm
fuente
¿Se está ejecutando el contenedor en Ubuntu Trusty? Si es así, ese sería el motivo.
saiarcot895

Respuestas:

12

¿ De qué es Docker? :

LIGERO

Los contenedores que se ejecutan en una sola máquina comparten el mismo núcleo del sistema operativo; comienzan instantáneamente y usan menos RAM. Las imágenes se crean a partir de sistemas de archivos en capas y comparten archivos comunes, lo que hace que el uso del disco y las descargas de imágenes sean mucho más eficientes.

Los contenedores se ejecutan en el núcleo del sistema operativo host. En su caso, el host podría ser un Ubuntu 14.04 (ejecutando el núcleo original) o un Ubuntu 12.04 (ejecutando un núcleo desde la pila de habilitación de hardware de confianza ).

Si el host es Ubuntu 14.04, puede instalar el kernel 3.16:

sudo apt-get install linux-generic-lts-utopic

O el núcleo 3.19:

sudo apt-get install linux-generic-lts-vivid

Para Ubuntu 12.04, el kernel 3.13 es el último oficial.

Eric Carvalho
fuente
¿Quiere decir que tendría que actualizar el núcleo del host? ¿No hay forma de actualizar el núcleo del contenedor?
jcm
55
@jcm No hay kernel dentro de un contenedor. Incluso si instala un kernel, no se cargará cuando se inicie el contenedor. El propósito de un contenedor es aislar procesos sin la necesidad de ejecutar un nuevo núcleo. Por eso también los contenedores están restringidos a Linux. Si necesita ejecutar otro sistema operativo u otra versión del núcleo, debe hacer uso de la virtualización.
Eric Carvalho