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

Raz*_*org 5 containers kernel kernel-module docker

我刚刚安装了一个自定义内核模块来在我的 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
Run Code Online (Sandbox Code Playgroud)

在 linux 主机上,有些人建议这样做:Docker 加载内核模块,但它既与 macOS 不兼容,又“脏”...

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

Raz*_*org 7

我发现 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 for 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

在这里拉请求。

  • 不适用于 OSX 的较新 Docker,因为它将所有 linux 文件(包括内核)保存在 `/Applications/Docker.app/Contents/Resources/linuxkit/docker-for-mac.iso` 中 (2认同)