为什么内核版本与 Docker 容器中的 Ubuntu 版本不匹配?

jcm*_*jcm 11 kernel container docker

我有一个从 Ubuntu 14.10 构建的 Docker 容器。当我登录到容器检查 Ubuntu 版本和内核版本时,我看到以下内容:

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
Run Code Online (Sandbox Code Playgroud)

我认为Ubuntu的14.10应该是内核版本3.16(为说明这里),所以为什么我的内核版本3.13.0-24泛型?

我问的原因是因为我想要在 3.13.0-29-generic 中有一个补丁(即,在我的 docker 容器中使用 fallocate 处理 AUFS),这在这里讨论。

Eri*_*lho 12

什么是Docker?

轻的

在一台机器上运行的容器共享相同的操作系统内核;它们立即启动并使用更少的 RAM。图像由分层文件系统构建并共享公共文件,从而使磁盘使用和图像下载更加高效。

容器在主机操作系统内核上运行。在您的情况下,主机可以是 Ubuntu 14.04(运行原始内核)或 Ubuntu 12.04(运行来自 trusty 的硬件启用堆栈的内核)。

如果主机是 Ubuntu 14.04,您可以安装内核 3.16:

sudo apt-get install linux-generic-lts-utopic
Run Code Online (Sandbox Code Playgroud)

或内核 3.19:

sudo apt-get install linux-generic-lts-vivid
Run Code Online (Sandbox Code Playgroud)

对于 Ubuntu 12.04,内核 3.13 是最新的官方内核。

  • @jcm 容器内没有内核。即使安装了内核,容器启动时也不会加载。容器的真正目的是在不需要运行新内核的情况下隔离进程。这也是容器仅限于 Linux 的原因。如果您需要运行其他操作系统或其他内核版本,则必须使用虚拟化。 (6认同)