After reading this page, I almost gave up building a kernel module in Docker so I'm adding this answer hoping it helps somebody. See also what-is-the-difference-between-kernel-drivers-and-kernel-modules
You can build Kernel modules in Docker as long as the Kernel source required for the build is available inside Docker. Lets say you want to build against the latest kernel source available in your yum repos, you could install the kernel source using yum install kernel-devel
. The source will be in /usr/src/kernels/<version>
directory. You could install specific version of kernel-devel
from your repo if that is what you want.
Then build the module using $ make -C <path_to_kernel_src> M=$PWD
where the path to the kernel source would be /usr/src/kernels/<version>
.
Read - Kernel Build System » Building External Modules
Docker container uses the kernel of the host machine so if you want to build against the running kernel, i.e., the kernel of the Docker host machine, you could try running the container in privileged mode and mounting the modules directory. docker run --name container_name --privileged --cap-add=ALL -v /dev:/dev -v /lib/modules:/lib/modules image_id
See this
You should not load the modules on a kernel that is not the same as the one the module was built for. You could force install it but that is highly discouraged. Remember your running kernel, i.e., the Docker host kernel, is the kernel of the Docker container irrespective of what kernel-devel
version you installed.
To see the kernel the module was built for (or built using), run modinfo <module>
and look for vermagic
value.
Dynamic Kernel Module Support is also worth a read.