Le partage de périphériques (webcam, lecteurs USB, etc) avec Docker
J'ai un besoin de partager des périphériques spécifiques de /dev
sur ma machine Linux avec mon conteneurs docker.
La --privileged
indicateur fonctionne pour le partage de tous les appareils dans /dev
qui sont présents au moment docker run
est appelé, mais tout par la suite ajouté ou supprimé des appareils ne se propagent pas dans le récipient.
J'ai essayé docker run -v=/dev:/dev ...
mais qui a fini par vissage avec la propriété et les autorisations de fichiers comme /dev/pts, conduisant à la machine hôte ne pas être en mesure de créer de nouveaux pseudo-terminaux.
J'ai aussi essayé la --device
drapeau, mais qui ne permet pas de partager un périphérique qui n'existe pas encore.
Enfin, j'ai essayé de partage de volumes pour les appareils de type -v=/dev/video0:/dev/video0
mais si /dev/video0 n'existe pas avant de l'exécuter, docker crée un répertoire et une webcam ne prendra pas de /dev/video0 lorsqu'il est branché.
Est-il une meilleure manière d'obtenir cette fonctionnalité prise en charge?
Vous devez vous connecter pour publier un commentaire.
Vous êtes à la recherche vérifiez l'indicateur
--device
Have a nice day!
Je pense que en théorie c'est possible pour assurer à l'aide de la
--privileged
drapeau, que cette chose vous donne la possibilité d'accéder à tous les périphériques hôtes. Si vous installez usbutils ou similaire ( en fonction de vos images, Distribution), vous verrez que les privilégiés conteneur est en mesure de voir les périphériques branchés à chaud au lors de l'exécution delsusb
.Malheureusement, bien qu'ils n'apparaissent pas dans le répertoire /dev. Le script de la création de ces descripteurs et les avoir dûment prises en charge par votre logiciel sous /dev peut devenir assez impliqués malheureusement. Il n'a pas à être de cette façon pour vos appareils mais.
Ce que vous pouvez faire en tant que première tentative est de simplement créer à l'aide de mknod.
J'ai essayé avec mon téléphone HTC et c'est un peu travaillé ( les détails ne sont pas pertinentes ici ), il suffit de cocher la ligne pour les branchés à chaud au dispositif de commande lsusb:
aller dans le dossier approprié pour le descripteur:
vérifier la version majeure pour le pilote usb sur votre noyau à partir de l'existant descripteurs:
=> 189 🙂 => créer le hochement de la tête et en faisant de la sorte l'utilisation mineure de la version 0.
=> au moins
lsusb -v
est désormais capable de l'ouverture de l'appareil. Même devrait fonctionner pour la plupart des matériels de l'omi, à quelques exceptions près.Ce que vous pourriez faire comme une alternative, peut-être plus lent, mais certainement plus sûr et plus dans l'esprit de Docker et de la conteneurisation est d'utiliser des conteneurs pour accéder à vos appareils lorsque vous chaud-monter et ensuite de partager les périphériques avec le conteneur principal de l'exécution de votre application vidéo via socat ats via tcp.
Dire que vous hotplug /dev/video0 sur l'ordinateur hôte, vous pouvez lancer un nouveau conteneur qui a cet appareil monté dans ce cas. Ce conteneur ( qui a socat installée ) pourrait exécuter:
En supposant que cette chose a le nom d'hôte video0-serveur, vous pouvez maintenant créer le descripteur de video0 sur le client par le biais de:
Maintenant, vous devriez être en mesure d'utiliser l'appareil, juste bien. Pour de nombreux appareils de la socat généraux ne devrait pas être un problème je pense.
Si ce script à l'aide de plusieurs conteneurs de manière dynamique communiquer avec votre conteneur principal via la mise en réseau est une option et la performance n'est pas affectée de manière significative par la surcharge trop, la dernière option est plus propre et plus sûr que
--privileged
mode, à mon avis.--device
drapeau à la place?--device
ne sera pas vous aider dans ce scénario 🙂Il est difficile de placer l'appareil lorsque le système est en cours d'exécution (USB détection de), vous devez faire un script pour mettre les dispositifs qu'ils sont trouvés et ne l' --rm (de sorte que chaque fois que vous quittez la machine est supprimé et vous avez une nouvelle chance pour importer les appareils)