uname 返回 Docker 容器中的主机内核

uname 返回 Docker 容器中的主机内核

我在 Windows WSL 2 中使用 Ubuntu 20.04。运行时uname -r显示5.4.72-microsoft-standard-WSL2,这是可以理解的。但是,当我使用官方 Ubuntu 映像构建 Docker 映像,然后在uname -r从该映像创建的容器内运行时,它仍然显示5.4.72-microsoft-standard-WSL2。当我使用其他 Linux 映像时也会发生这种情况(使用 Debian 测试)。

Docker 容器中怎么会有 WSL 内核运行?我手头没有“真正的”Linux 计算机,所以我不知道命令应该说什么,但我想它不会提到 WSL。

答案1

可以合理地预期 Docker 容器将运行不同的内核如果您将 Docker 视为某种“虚拟机”技术,但事实并非如此。

Docker 的“容器”部分是它正在被创建之内Linux 主机实例。这就是它具有毫秒级启动时间的原因。Docker(和其他类似技术)是使用现有内核功能(如 LXC、chroot、cgroups 等)构建的。

如果您的 Docker 主机是“真正的”Linux 实例,则容器也将始终显示与主机相同的内核,并带有uname -r

搜索类似docker chroot或者docker lxc了解有关内部结构的更多信息。

然而,WSL 仍在进行虚拟化。在 WSL 之前(并且仍然作为一种替代方案),Windows 上的 Docker 确实为 Linux 实例使用了虚拟机。然后容器在该 VM 内运行,使用其内核并共享其资源。但现在,有了 WSL2,它的内核就可以被利用了。是的,在幕后,它仍然是一个运行 WSL2 的 Hyper-V VM(某种意义上),但现在它更加精简,并且与 Windows 主机集成得更好。

相关内容