2017-04-19 43 views
2

我中庸之道安装a custom kernel module对我的MacBook加载内核模块泊坞窗容器

使SCTP支持,我想我的装载码头工人容器内这个内核模块。

我尝试使用--cap加SYS_MODULE标志并安装libsctp-dev的lksctp工具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主机上,有些人劝去做做这样的:Docker loading kernel modules但它都与MacOS的未对应和“脏” ......

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

+1

您的Mac正在使用Darwin内核,而Docker正在使用Linux内核。完全不兼容。你也许可以做这样的事情,但是你必须进入在Mac上托管Docker的Linux虚拟机,并在那里执行。这是容器内核运行的地方 - 在Linux中,而不是在macOS中。 –

+2

你可以像这样访问Linux虚拟机BTW:'docker run --rm -it --privileged --pid = host debian nsenter -t 1 -m -u -n -i sh' –

+0

@DanLowe发布那个答案,而不是一组评论 –

回答

3

我发现docker for mac运行在一个hyperkit虚拟机上,以获得linux内核。 docker run --rm -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh

这个VM使用的内核源代码可在这里:

正如评论mentionned由@DanLowe,我们可以使用下面的命令来访问这个VM https://github.com/linuxkit/linuxkit

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

然后我重新编译内核并复制我的新编译的内核文件(bzImage的),以泊坞窗为Mac /Applications/Docker.app/Contents/Resources/moby/vmlinuz64内核文件。

为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

pull请求here

+0

不适用于较新的OSX的Docker,因为它保留所有的Linux文件,包括'/ Applications/Docker.app/Contents/Resources/linuxkit/docker-for-mac.iso中的内核' –