1 votes

Créer un conteneur docker avec un lien vers un périphérique matériel qui n'existe pas encore

Mon cas d'utilisation :

J'utilise une instance octoprint conteneurisée pour piloter une imprimante 3D. Le problème que je rencontre est que si l'imprimante (usb) n'est pas connectée pendant le processus de démarrage du conteneur, alors il ne démarre pas du tout. Docker compose ne peut pas trouver le périphérique usb lorsqu'il n'est pas connecté, ce qui fait que le conteneur ne démarre pas.

Le problème est que l'imprimante est physiquement éteinte lorsqu'elle n'est pas en train d'imprimer et qu'allumer l'imprimante à chaque fois que le conteneur a besoin d'un redémarrage n'est pas une solution faisable. Existe-t-il un moyen (dans docker compose land) de démarrer le conteneur lorsqu'un périphérique n'est pas disponible et de le relier une fois qu'il est disponible ? Ou de vérifier si le périphérique est présent et si ce n'est pas le cas, de démarrer sans lui. L'OS hôte que j'utilise est le raspberry pi OS.

Ma configuration actuelle est la suivante :

version: '3'
services:
  octoprint:
    container_name:octoprint
    image: "octoprint/octoprint"
    devices:
      - "/dev/ttyUSB0:/dev/ttyUSB0"
    network_mode:host
    restart: unless-stopped

Je n'arrive pas à trouver un moyen de le faire.

La seule chose à laquelle je pense est de créer un script qui se déclenche lorsque /dev/ttyUSB0 est créé et de l'ajouter au conteneur déjà en cours d'exécution. Mais cela semble être la pire des solutions. J'aimerais résoudre ce problème dans le cadre de docker/docker compose.

Une autre "solution" consiste à redémarrer automatiquement le conteneur chaque fois que l'imprimante est mise sous tension par l'intermédiaire d'une intégration d'assistance à domicile. Il s'agit également d'un scénario catastrophe que j'aimerais éviter.

De plus, je ne suis pas sûr de savoir si je dois poster ceci sur la branche "superuser" de stackexchange ou sur la branche unix/devops. Merci de me corriger si je dois le poster ailleurs.

1voto

mashuptwice Points 1697

En guise de solution de contournement, vous pouvez utiliser le mode privilégié et monter l'ensemble du fichier /dev dans votre conteneur :

privileged: true
    devices:
      - '/dev:/dev'

source

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X