2017-04-19 1 views
2

J'ai juste installé a custom kernel module pour activer le support SCTP sur mon macbookmodule de noyau de charge de Mac OS sierra hôte à un conteneur docker

Et je voudrais charger ce module du noyau dans mon conteneur docker.

J'ai essayé de démarrer un conteneur en utilisant le --cap-add SYS_MODULE drapeau et installer les libsctp-dev-tools lksctp Kmod paquets dans le conteneur pour permettre l'utilisation SCTP "modprobe SCTP" ... mais sans succès :

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 

Sur un hôte linux, certaines personnes conseillez-faire comme ça: Docker loading kernel modules mais il est à la fois non compatibles avec Mac OS, « sale » ...

ma question est la suivante: est-ce que quelqu'un sait comment utiliser le module noyau dans un docker con tainer utilisant un hôte macOS? Est-ce que c'est possible ?

+1

Votre Mac utilise un noyau Darwin et Docker utilise un noyau Linux. Pas du tout compatible. Vous pourriez être capable de faire quelque chose comme ça, mais vous devriez aller dans la machine virtuelle Linux qui héberge Docker sur votre Mac et le faire là-bas. C'est là que les noyaux de conteneurs s'exécutent - sous Linux, pas dans macOS. –

+2

Vous pouvez accéder à la VM Linux comme ceci BTW: 'docker run --rm -it --privileged --pid = hôte debian nsenter -t 1 -m -u -n -i sh' –

+0

@DanLowe afficher comme une réponse , pas un ensemble de commentaires –

Répondre

3

J'ai découvert que docker pour mac tourne sur une machine virtuelle hyperkit avec alpine pour obtenir le noyau linux.

Comme mentionné par @DanLowe dans les commentaires, nous pouvons accéder à cette machine virtuelle en utilisant la commande suivante: docker run --rm -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh

Les sources du noyau utilisées par cette machine virtuelle sont disponibles ici: https://github.com/linuxkit/linuxkit

J'ai effectué le noyau /kernel_config fichier et définir CONFIG_IP_SCTP = y pour activer le support SCTP dans le noyau.

Je recompiler le noyau et copié mon fichier nouveau noyau (bzImage) au docker pour le fichier noyau mac /Applications/Docker.app/Contents/Resources/moby/vmlinuz64.

docker redémarrés pour le Mac et ...

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 Demande here.

+0

ne fonctionne pas pour Docker plus récent pour OSX car il conserve tous les fichiers linux, y compris le noyau dans '/ Applications/Docker.app/Contents/Ressources/linuxkit/docker-for-mac.iso' –