You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu 18.04 Docker镜像应安装哪款Linux headers?

在ubuntu:18.04 Docker镜像中安装匹配的Linux Headers

嘿,这个问题得先搞清楚Docker的内核工作逻辑——容器是共享宿主机内核的,你在容器里执行uname -r得到的4.19.76-linuxkit其实是宿主机(大概率是Docker Desktop)的内核版本,而不是ubuntu:18.04镜像自带的内核(容器本身根本不会独立运行内核)。

这就导致了一个关键问题:ubuntu:18.04默认软件源里的linux-headers包,都是对应Ubuntu 18.04官方支持的内核版本(比如4.15.x系列),你看到的linuxkit定制内核的headers,在默认源里是找不到的。

针对你的需求,这里有几个可行的方案:

  • 如果是要编译内核模块:最稳妥的方式是在宿主机上编译模块,然后把编译好的模块文件挂载到容器里使用。因为内核模块必须严格匹配宿主机的内核版本,容器里的环境既没有完整的内核编译依赖,也拿不到对应linuxkit内核的headers包。
  • 如果只是需要通用头文件(用户态程序编译):可以安装Ubuntu 18.04默认的通用headers包,执行命令:
    apt-get update && apt-get install linux-headers-generic
    
    这个包会安装对应镜像发行版的内核headers,虽然版本和宿主机的linuxkit内核不一致,但对于大多数用户态程序的编译需求(比如依赖内核头文件的用户态工具)已经够用了。
  • 非要在容器里装匹配linuxkit内核的headers:这会比较麻烦,因为linuxkit是Docker定制的内核,你需要手动从linuxkit的代码仓库拉取对应版本的内核源码,然后编译生成headers文件。这种方式步骤繁琐,除非有特殊需求,否则不推荐。

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

火山引擎 最新活动