Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可以使用Docker内部构建的内核模块吗?_Docker_Kernel Module - Fatal编程技术网

可以使用Docker内部构建的内核模块吗?

可以使用Docker内部构建的内核模块吗?,docker,kernel-module,Docker,Kernel Module,我有一个定制的内核模块,需要为特定的硬件构建。我想自动设置我的系统,所以我一直在包装几个应用程序。我需要的东西之一就是这个内核模块。假设Docker容器中的内核头等与主机上的内核是完全相同的版本,是否可以将整个构建过程容器化,并允许主机使用该模块?许多涉及控制主机系统的任务最好直接在主机上运行,在这里我将避免Docker 在insmod(8)级别,Docker容器通常使用一组受限的权限运行,并且不能在主机上进行类似这样的极具侵入性的更改。理论上可能有一个docker run--cap add选项

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

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

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

在更广泛的Linux级别上,定制内核模块的构建版本必须与主机的内核完全匹配。这意味着,如果您更新主机内核(例如例行安全更新),您还必须重建和重新安装任何自定义模块。主流Linux发行版对此有支持,但是如果您已经将此管理打包到一个容器中,那么您必须记住如何使用较新的内核头重新构建容器,并确保在重新启动主机之前不会重新启动容器。这可能很棘手


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

我建议,从内核POV来看,模块从哪个命名空间加载并不重要,因为调用
init\u模块(2)
的进程对此具有足够的权限(例如,在特权容器中运行)。只是猜测,不是具体的答案。我完全理解您提到的问题,以及我的意图是如何与容器的使用模式背道而驰。总体意图是我想隔离构建环境。虽然构建的映像可能无法在多个系统之间共享,但我的主要目标是让自己的系统正常工作,太长了,读不下去了,我想安装FEDORA,DOCKE CE,让我的软件都可以不用做其他事情。像KICSTEnter这样的安装,或者像AdEnter或CHIF这样的自动化工具,可能是这个用例更好的匹配。