Zigbee2mqtt sur Docker dans un LXC Proxmox

Salut,

J’ai actuellement zigbee2mqtt qui tourne sur une VM classique, ça marche très bien depuis pas mal de temps.

J’avais commencé à monter des éléments sous Docker dans un LXC Proxmox mais rien qui nécessitait de piloter du matériel et je me retrouve comme beaucoup avec un problème, probablement liée (même pas certain) à l’USB passthrough.

J’ai mis à jour Proxmox en 8.2.8 car j’ai vu qu’ils avait introduit l’USB passthough dans la partie Resources.

Depuis l’hôte Proxmox :

root@pve2yp:~# ls -l /dev/serial/by-id
total 0
lrwxrwxrwx 1 root root 13 Nov 16 19:39 usb-1a86_USB_Serial-if00-port0 -> ../../ttyUSB0

La configuration du Device sur le LXC Docker :

Dans le conteneur Docker, je retrouve bien ma clef POP :

root@docker:~# ls -l /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
crw-rw---- 1 root root 188, 0 Nov 16 18:41 /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0

Mais en essayant de déployer un Stacks (Docker Compose) ou directement à partir de la ligne de commande Docker j’ai une erreur :

docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error creating device nodes: mount /dev/ttyUSB0:/var/lib/docker/overlay2/57907ebd0d70e18055abb8b88420afde7dcd73cbcc0c4c8c933e26e392a3324e/merged/dev/ttyUSB0 (via /proc/self/fd/6), flags: 0x1000: no such file or directory: unknown.
ERRO[0000] error waiting for container:

La ligne de commande est celle pris sur le site de zigbee2mqtt et légèrement modifiée :

docker run \
   --name zigbee2mqtt \
   --restart=unless-stopped \
   --device=/dev/serial/by-id/usb-1a86_USB_Serial-if00-port0:/dev/ttyUSB0 \
   -p 8080:8080 \
   -v /srv/docker/zigbee2mqtt/data:/app/data \
   -v /run/udev:/run/udev:ro \
   -e TZ=Europe/Paris \
   koenkk/zigbee2mqtt

Dans la conf du LXC j’ai unprivileged: 1

Est-ce que ça parle à quelqu’un cette erreur durant le mount ?

J’ai tenté avec les anciennes méthodes que j’ai trouvé en indiquant des infos dans la conf du LXC mais sans plus de succès

lxc.cgroup2.devices.allow
lxc.mount.entry

Salut, faire un docker dans un ‹ docker › n’est pas top top :),
je te conseil ce repo git : Proxmox VE Helper-Scripts ou tu pourra surement trouver ton bonheur :slight_smile:

Salut,

Merci pour ton retour.

Je connaissais ce site, je voulais éviter de déployer un autre conteneur LXC et tout faire dans le même.

De plus il ne fonctionne qu’avec un Privileged, ce que je voudrais éviter :slight_smile:

je suis pas trop connaisseur de docker mais de souvenir il n’y as pas une histoire de droit ou group a ajouter a docker « sudo usermod -aG dialout $USER » ou plugdev

Apres je sais que proxmox et les clef usb c’est tout un monde, au restart ca change d’id et compagnie je suis obliger de passez par une VM pour jeedom pour avoir les ports usb car en lxc ca tenez pas

oui mais bon… ton lxc docker il devra aussi etre en mode privilegied, forcément.

le mieux est de séparer, mettre un docker dans un container pour refaire un autre container, c’est des poupées russes :slight_smile:

Hello,

Je suis vraiment pas à l’aise avec Docker c’est clair !

J’étais partis il y a des mois via un tuto (et je veux pas trop changer, ça marche …) sur le montage de Proxmox en créant un CT Debian 11 puis en installant docker et en lançant un docker Portnair

Ensuite j’ai installé l’ensemble des conteneurs depuis Portnair. C’est OK mais de ce que je comprends, c’était pas l’idéal …

Là j’ai finalement réussi avec l’aide d’un gars sur le forum Proxmox en faisant ce que j’avais essayé mais à une différence prêt :

/etc/udev/rules.d/99-usb-serial.rules :
SUBSYSTEM=="tty", ATTRS{idVendor}=="1cf1", ATTRS{idProduct}=="0030" SYMLINK+="ttyZIGBEE0" KERNEL=="ttyACM[0-9]*",MODE="0666",GROUP="100000"
/etc/pve/lxc/100.conf :
lxc.cgroup2.devices.allow: c 166:* rwm
lxc.mount.entry: /dev/ttyZIGBEE0 dev/ttyACM0 none bind,optional,create=file

La bonne idée était le GROUP="100000"

J’ai donc pu installer un conteneur zigbee2mqtt mais en voulant restaurer les fichiers nécessaires de la conf zigbee … je n’arrive pas à accéder à ce foutu volume dans le CT. C’est vraiment pas pratique :pensive:

EDIT : J’ai copié le contenu à la main des 3 fichiers mais j’arrive même pas à accéder au frontend sur le 8080 alors qu’il n’est pas utilisé par un autre conteneur.
Allez ça m’a saoulé … c’est trop compliqué … retour sur ma bonne vieille VM
Je voulais éviter de gérer les updates OS de temps en temps mais c’est bien plus simple de faire comme ça.

Bonjour,
Ayant aussi Jeedom sur une VM, quel intérêt de passer sur un LXC ?
C’est plus complexe, en cas de migration entre Proxmox, ça redémarre, etc …

Juste pour ma curiosité personnelle …

Alors je ne parlais pas de Jeedom mais juste de zigbee2mqtt (j’ai totalement séparé la gestion des contrôleurs Zwave/Zigbee) de Jeedom.

Donc ce que je vais dire n’engage que moi, sûrement parce que je n’ai pas assez d’expérience ou pas les bonnes pratiques.

Sans parler de LXC (parce qu’on peut faire la même chose dans un VM) le seul avantage que je vois à Docker c’est les ressources. En même temps c’est très probablement pour ça que ça a été créé :joy:.

La mise à jour d’un conteneur docker est aussi très rapide (et pratique quand on a compris quoi faire) mais bon je trouve qu’il y a beaucoup de galères aussi.

Déjà rien que la partie qui concerne l’accès aux fichiers c’est… Prise de tête.

Bref une VM ça reste vraiment plus simple à appréhender, ça se comporte comme une machine physique avec la puissance de la partie backup/restauration. Dès que l’on a assez de ressources (disques/ CPU / RAM) faut très probablement éviter d’aller jouer avec docker selon moi.

J’utilise aussi des LXC (une dizaine) mais pour une appli spécifique qui ne demande pas de liens extérieurs particuliers (réseau, USB …).
J’avais eu aussi dans l’idée, il y a longtemps, de mettre le broker MQTT en LXC séparé de Jeedom mais, comme j’utilise de la HA, lors du déplacement des LXC, il y a redémarrage, ce qui pose problème.
Du coup, Jeedom et ses dépendances, c’est tout-en-un :grin:

Tu as l équivalent (?) Ici :

Tu peux choisir normalement lors de la creation si tu es/restes en (un)priviledged

Dans un cas :

If the LXC is created Privileged, the script will automatically set up USB passthrough

Je testerai pour rire mais, comment on accède facilement aux fichiers afin de restaurer certains fichiers du répertoire data ?

Je ne gère absolument pas assez docker, donc pas de bons conseils avec moi sorry

Tu parles d’un container docker ou d’un container linux (LXC) là?
un LXC tu le gères comme une vm, donc tu t’y connectes soit via la console (via interface proxmox), soit via ssh si tu l’as activé

Pour que tu es la manip exacte, comme ça tu pourras éventuellement me dire, j’avais fais :

Create CT et choisi un template de Debian 11.7 (il y a quelques mois) :

Puis dans ce CT, en ssh : curl -sSL https://get.docker.com/ | sh pour installer Docker

Et enfin j’avais installé Portainer de cette façon pour gérer Docker depuis Portainer : docker run --restart always -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce

Donc pour moi je suis dans un LXC Linux et à l’intérieur tourne Docker.

Je supose qu’il faut que j’active/install sshd dans ce LXC pour pouvoir l’attaquer en SFTP et cela permettrait de déposer des fichiers dans les volumes qu’utilise Docker, correct ?

ok tu parlais donc de ton docker :slight_smile:

oui ca devrait faire l’affaire

1 « J'aime »