Por que a versão do kernel não corresponde à versão do Ubuntu em um contêiner do Docker?

11

Eu tenho um contêiner Docker criado a partir do Ubuntu 14.10. Quando entro no contêiner para verificar a versão do Ubuntu e a versão do kernel, vejo o seguinte:

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

Eu pensei que o Ubuntu 14.10 deveria ser a versão 3.16 do kernel (como indicado aqui ), então por que eu tenho a versão 3.13.0-24-genérica do kernel?

A razão pela qual estou perguntando é porque há um patch no 3.13.0-29-genérico que eu gostaria de ter (ou seja, tendo fallocate trabalhando no AUFS no meu contêiner de docker) que é discutido aqui .

jcm
fonte
O contêiner está sendo executado no Ubuntu Trusty? Se sim, seria por isso.
precisa saber é o seguinte

Respostas:

12

De O que é o Docker? :

LIGHTWEIGHT

Os contêineres executados em uma única máquina compartilham o mesmo kernel do sistema operacional; eles começam instantaneamente e usam menos RAM. As imagens são construídas a partir de sistemas de arquivos em camadas e compartilham arquivos comuns, tornando o uso do disco e downloads de imagens muito mais eficientes.

Os contêineres são executados no kernel do sistema operacional host. No seu caso, o host pode ser um Ubuntu 14.04 (executando o kernel original) ou um Ubuntu 12.04 (executando o kernel da pilha de ativação de hardware da trusty ).

Se o host for o Ubuntu 14.04, você poderá instalar o kernel 3.16:

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

Ou kernel 3.19:

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

Para o Ubuntu 12.04, o kernel 3.13 é o último oficial.

Eric Carvalho
fonte
Você quer dizer que eu precisaria atualizar o kernel do host? Não há como simplesmente atualizar o kernel do contêiner?
jcm
5
@jcm Não há kernel dentro de um contêiner. Mesmo se você instalar um kernel, ele não será carregado quando o contêiner for iniciado. O próprio objetivo de um contêiner é isolar processos sem a necessidade de executar um novo kernel. É também por isso que os contêineres são restritos ao Linux. Se você precisar executar outro SO ou outra versão do kernel, precisará usar a virtualização.
Eric Carvalho