将内核模块从mac os sierra主机加载到docker容器

时间:2017-04-19 15:02:59

标签: docker kernel containers kernel-module

我已经安装了a custom kernel module以在我的Macbook上启用SCTP支持

我想在我的docker容器中加载这个内核模块。

我尝试使用 - cap-add SYS_MODULE 标志启动容器,并在容器中安装 libsctp-dev lksctp-tools kmod 包以启用sctp使用" modprobe sctp" ...但未成功:

modprobe: ERROR: ../libkmod/libkmod.c:586 kmod_search_moddep() could not open moddep file '/lib/modules/4.9.13-moby/modules.dep.bin' modprobe:
  FATAL: Module SCTP not found in directory /lib/modules/4.9.13-moby

在Linux主机上,有人建议这样做:Docker loading kernel modules但它与macOS不兼容,而且"脏" ...

所以我的问题是:有没有人知道如何在使用macOs主机的docker容器中使用内核模块?这甚至可能吗?

1 个答案:

答案 0 :(得分:4)

我发现mac的docker在带有alpine的hyperkit VM上运行以获取linux内核。

正如@DanLowe在评论中提到的,我们可以使用以下命令访问此VM:docker run --rm -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh

此VM使用的内核源代码可在此处获取:https://github.com/linuxkit/linuxkit

我编辑了 kernel / kernel_config 文件并设置 CONFIG_IP_SCTP = y 以在内核中启用SCTP支持。

然后我重新编译内核并将我新编译的内核文件(bzImage)复制到docker for mac /Applications/Docker.app/Contents/Resources/moby/vmlinuz64 内核文件。

为mac重新启动了docker ...

host>docker run -it debian container>cat /proc/net/protocols protocol size sockets memory press maxhdr slab module cl co di ac io in de sh ss gs se re sp bi br ha uh gp em SCTPv6 1416 1 0 no 0 yes kernel y y y y y y y y y y y y n y y y y y y SCTP 1256 0 0 no 0 yes kernel y y y y y y y y y y y y n y y y y y y

提取请求here