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

Load kernel module from mac os sierra host to a docker container

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

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

我尝试使用 --cap-add SYS_MODULE 标志启动容器并安装 libsctp-dev lksctp-tools kmod 容器中的包以使用 "modprobe sctp"... 启用 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 主机上,有些人建议这样做: 但它与 macOS 和 "dirty"...

都不兼容

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

我发现 docker for mac 运行在带有 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 内核文件.

已重新启动 docker mac 并且...

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.