我已经安装了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容器中使用内核模块?这甚至可能吗?
答案 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。