是否可以使用从Docker内部构建的内核模块?

时间:2019-02-01 12:28:14

标签: docker kernel-module

我有一个需要为特定硬件构建的自定义内核模块。我要自动设置我的系统,所以我一直在集装多个应用程序。其中一个我需要的东西是这样的内核模块。假设Docker容器中的内核标头等与主机上的内核是完全相同的版本,是否有可能将我的整个构建过程容器化并允许主机使用该模块?

1 个答案:

答案 0 :(得分:0)

许多涉及控制主机系统的任务最好直接在主机上运行,​​在这里我将避免使用Docker。

insmod (8)级别,Docker容器通常以一组受限的权限运行,并且无法在主机上进行此类极具侵入性的更改。从理论上讲,可能会有一个docker run --cap-add选项,但Docker的一项重要设计声明是容器进程不应像这样影响其他容器或主机。

在更广泛的Linux级别上,自定义内核模块的构建版本必须与主机的内核完全匹配 。这意味着,如果您更新主机内核(例如,用于例行安全更新),则还必须重建并重新安装所有自定义模块。主流Linux发行版都对此提供支持,但是如果您将对它的管理放到了容器中,则必须记住如何使用较新的内核标头重建容器,并确保在重启主机之前不要重新启动该容器。 。那可能很棘手。

在Docker级别上,您实际上是在构建只能在一个非常特定的系统上使用的映像。通常,此概念是构建可在多种上下文中重用的图像;您希望能够将映像推送到注册表并以最小的配置在另一个系统上运行。如果图像绑定到非常特定的内核版本或其他主机级别的依赖项,则很难做到这一点。