我目前有我的主机系统运行macos与docker。我有我的macos主机系统产卵一个docker容器。
派生的Docker容器当前正在运行ubuntu:19.10
我正在尝试在Docker容器内构建内核模块
当我奔跑
$> make
我得到...
Building coolMod driver...
make -C /lib/modules/`uname -r`/build M=/home/foo/coolMod modules
make[1]: *** /lib/modules/4.19.76-linuxkit/build: No such file or directory. Stop.
make: *** [Makefile:43: coolMod.ko] Error 2
Docker容器没有内核头文件。
当我尝试运行时:
$> apt install linux-headers-$(uname -r)
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package linux-headers-4.19.76-linuxkit
E: Couldn't find any package by glob 'linux-headers-4.19.76-linuxkit'
E: Couldn't find any package by regex 'linux-headers-4.19.76-linuxkit'
如何安装内核头文件,以便从Docker容器中构建内核模块?
谢谢大家!
2条答案
按热度按时间gcuhipw91#
也许会晚一些,但是为了在容器内构建内核模块,您应该在--特权模式下执行容器。
除了依赖项kernel-devel和kernel-header之外,内核应该为您的特定内核版本构建,因此您应该创建一个卷来将host:/lib/modules链接到your_container:/lib/modules。
一个好的起点应该是https://projectatomic.io/blog/2018/06/building-kernel-modules-with-podman/。
jxct1oxe2#
Docker容器没有自己的内核;它们使用Docker主机的内核。因此,当您运行
uname
命令时,您看到的结果是底层Docker主机的结果。您可以通过比较uname -a
在Docker主机上的结果与Docker容器中的结果来验证这一点。这很可能是
make
和apt install
都失败的原因。我不确定您要构建的特定模块,以及它是否有任何其他依赖项。一般来说,如果Docker容器中有内核源代码,则可以在Docker容器中构建内核模块。请尝试在
apt install
命令中使用特定版本的内核,而不是使用/dependy onuname
命令。然后执行$ make -C <path_to_kernel_src> M=$PWD
请参考我刚刚发布的另一个问题的this答案。