2 votes

Comment ajouter un périphérique à tous les conteneurs docker

Pour utiliser les enclaves SGX, les applications doivent communiquer avec le pilote SGX, qui est exposé par l'intermédiaire de /dev/isgx sur l'hôte. Nous exécutons ces applications à l'intérieur de conteneurs Docker qui cartographient les données. /dev/isgx à l'intérieur avec le --device option de ligne de commande.

Existe-t-il une option permettant d'ajouter un dispositif ( /dev/isgx dans ce cas) à tout conteneur lancé par un moteur Docker ?

Edit :

Des progrès de mon côté jusqu'à présent :

Docker utilise containerd & runc pour créer une configuration de conteneurs avant son démarrage. Le fichier de configuration de Docker /etc/docker/daemon.json a un champ runtimes où l'on peut fournir des arguments arbitraires à runc :

[...]    
"runtimes": {
    "runc": {
        "path": "runc"
    },
    "custom": {
        "path": "/usr/local/bin/my-runc-replacement",
        "runtimeArgs": [
            "--debug"
        ]
    }
},
[...]

Malheureusement, il semble runc ne consomme pas beaucoup d'arguments utiles pour mes moyens ( runc --help y runc spec --help <-- crée la configuration).

J'ai trouvé intéressant code source concernant DefaultSimpleDevices y DefaultAllowedDevices en runc La base de code de l'entreprise. Le dernier commit de ce fichier dit 'Ne pas créer /dev/fuse par défaut', ce qui est prometteur, mais impliquerait de construire ma propre base de données. runc . J'espérais une solution générique via une option de configuration.

2voto

fishi Points 2112

UPDATE

Ce n'est pas la bonne réponse . Il s'avère que le cgroup parent par défaut de Docker est déjà ouvert. devices permissions :

/# cat /sys/fs/cgroup/devices/docker/devices.list 
a *:* rwm

Lors de la création d'un conteneur, un nouveau cgroup pour ce conteneur est créé avec des restrictions plus importantes. devices règles.


PREMIÈRE RÉPONSE

Je pense que vous pourriez utiliser les cgroups pour obtenir ce que vous voulez. Vous pourriez créer un nouveau cgroup sur votre machine hôte qui autorise l'accès à /dev/isgx et lancez votre démon Docker avec --cgroup-parent=<my-cgroup-name> . Vous pouvez également définir le cgroup-parent dans votre /etc/docker/daemon.json .

Si vous n'avez jamais travaillé avec des cgroups auparavant, il se peut que la configuration ne soit pas évidente. La façon de créer un nouveau cgroup dépend de votre système hôte, mais vous devez utiliser la commande devices pour mettre sur liste blanche des périphériques spécifiques pour un cgroup.

Par exemple, une façon de procéder consiste à utiliser libcgroup 's /etc/cgconfig.conf et donner un accès en lecture/écriture à un périphérique de bloc pour cgroup dockerdaemon de la manière suivante :

group dockerdaemon {
  devices {
    devices.allow = b <device-major>:<device-minor> rw
  }
}

Voici un exemple de la façon dont vous pouvez déterminer la majeure et la mineure de votre dispositif de blocage :

sudo udevadm info -n /dev/isgx

Voici quelques liens supplémentaires qui pourraient vous donner plus d'informations sur le sujet du cgroup :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X