Docker 加载内核模块

Docker loading kernel modules

我试图安装一个内核模块,xfsprogs。它已成功安装在容器内。真是令人惊讶,但是 lsmod 并没有在容器或主机系统中列出这个模块。 如何将新内核模块加载到容器中?(CentOS容器,Ubuntu主机)

容器通过系统调用与内核交互,不包含内核的任何部分或容器内的内核模块。这就是容器设计为重量轻且便于携带的原因之一。 xfsprogs 也是用户 space 程序而不是内核模块。

How can a new kernel module loaded in a container?(CentOS container, Ubuntu host)

模块需要加载到您的主机 OS,而不是从 docker 容器。

  • 运行特权模式下的容器(--privileged)
  • 添加所有功能(--cap-add=ALL)
  • 将主机/lib/modules挂载到容器中(-v /lib/modules:/lib/modules)
docker run --name container_name \
           --privileged \
           --cap-add=ALL -d \
           -v /dev:/dev \
           -v /lib/modules:/lib/modules \
           image_id

注意:此处添加了所有 Linux 功能,因此可以改进功能。 关于Linux能力模型的几句话

Falco 是一个在启动过程中加载内核模块的容器示例。

docker run -i -t --name falco --privileged \
  -v /var/run/docker.sock:/host/var/run/docker.sock \
  -v /dev:/host/dev \
  -v /proc:/host/proc:ro \
  -v /boot:/host/boot:ro \
  -v /lib/modules:/host/lib/modules:ro \
  -v /usr:/host/usr:ro \
  sysdig/falco