You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Docker Hub的Ubuntu 20.04 LTS镜像运行4.19内核而非5.4?

问题:Ubuntu 20.04 LTS Docker容器为何运行4.19内核而非5.4?

我在多个Docker容器里使用Ubuntu 20.04 LTS镜像,最近发现容器运行的是4.19版本的Linux内核,但根据Ubuntu 20.04的发布说明,它应该搭载5.4内核,想问问这是怎么回事?

复现步骤

  • 拉取Ubuntu最新镜像:docker pull ubuntu:latest
  • 启动容器并进入bash环境:docker run ubuntu:latest bash
  • 查看内核版本:uname -r
  • 查看内核详细信息:cat /proc/version
  • 查看系统版本信息:cat /etc/os-release

执行结果

  • uname -r 输出:4.19.76-linuxkit
  • cat /proc/version 输出:
    Linux version 4.19.76-linuxkit (root@4abe09437d05) (gcc version 8.3.0 (Alpine 8.3.0)) #1 SMP Tue May 26 11:42:35 UTC 2020
    
  • cat /etc/os-release 输出:
    NAME="Ubuntu" VERSION="20.04.1 LTS (Focal Fossa)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 20.04.1 LTS" VERSION_ID="20.04" HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" VERSION_CODENAME=focal UBUNTU_CODENAME=focal
    

解答

这完全是Docker的正常表现,核心原因是:Docker容器会共享宿主机的内核,并不会使用镜像自带的内核。

你看到的Ubuntu 20.04发布说明里的5.4内核,是针对物理机或完整虚拟机上的Ubuntu系统来说的——当你在物理机安装Ubuntu 20.04时,确实会默认安装5.4内核。但Docker本质是宿主机上的进程隔离技术,容器本身只是一组被隔离的进程,它不会启动自己的内核实例,而是直接复用宿主机正在运行的内核。

你容器里显示的4.19.76-linuxkit,其实是你的Docker宿主机的内核版本——比如如果你用的是Docker Desktop,它底层依赖Linuxkit虚拟机,这个虚拟机用的就是4.19内核。你可以在宿主机上执行uname -r,会发现和容器里的输出完全一致。

至于/etc/os-release显示的Ubuntu 20.04版本是准确的,容器里的用户空间确实是Ubuntu 20.04的环境,但内核是共享宿主机的,所以两者版本不匹配是正常情况。

如果非要在容器环境里使用特定版本的内核,那你只能更换宿主机的内核版本,或者改用KVM这类全虚拟化方案(这类方案会启动独立的内核,和宿主机内核无关)。

内容的提问来源于stack exchange,提问作者DanielHefti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 08:17:35