USB-Device an Synology im Docker verwenden

Da ich mit Docker noch ein absoluter Newbie bin und nur dank der Doku IPS darauf stabil(!!!) zum laufen gebracht habe, ist die Frage für euch vielleicht sehr einfach.
Ich habe eine Synology mit Docker und darauf wie gesagt IPS laufen. Wie kann ich an die Synology ein USB-Device, hier konkret einen optischen Lesekopf für einen Stromzähler (D0-Zähler), anschließen und dann in IPS darauf zugreifen?
Welchen Container muss ich dafür installieren? Was ist dabei einzustellen? Oder wie kann man da anders vorgehen?
Meine Recherche im Internet führte immer auf Kommandos per SSH. Das ist für mich ehrlich gesagt an der Stelle zu hoch. Deshalb bin ich für Hinweise dankbar.

Hallo @Ubari

ob es bei Deinem NAS ein Tool gibt, mit dem die Config für Deinen Docker zusammen geklickt werden kann, weiß ich nicht.

Generell hat ein USB Device im Host Betriebssystem einen Pfad. Diesen Pfad musst Du ausfindig machen und mit diesen Pfad in Deinen Docker mappen.

Wenn man einen Docker Container startet, kann
man diese Pfad zu einem Device als Parameter mitgeben. Alternativ gibt es auch eine Erweiterung (Script) namens Docker Compose. Damit werden die Parameter der Docker Container zum Start aus einer Config Datei geladen.

Am Beispiel hier könntest Du Dir das mal ansehen.

In dem Beispiel oben wird ein USB Device (Zigbee Coordinator Gateway) an einen Docker Zigbee2mqtt durchgereicht.

Vielleicht hilft Dir das.

Gruß Dirk

Bei meiner Frage hat mir @AndiBar sehr gut geholfen, sodass ich erfolgreich die USB-Devices an meinem Synology NAS mit Docker nutzen kann. Vielen Dank nochmal an der Stelle.
Da ich in der Recherche nicht den gewünschten Erfolg hatte, versuche ich hier einmal die Schritte darzustellen:

  1. Von der Seite jadahl.com den passenden USB serial driver (*.spk) herunterladen und auf dem NAS im Paketzentrum über „manuelle Installation“ installieren. Danach Neustart des NAS.
  2. Im Docker den Container Symcon stoppen.
  3. Per ssh auf die Synology verbinden.
  4. Folgenden Befehl starten:

sudo docker run --name symcon_usb --net=„host“ -v /volume1/docker/Symcon/lib:/var/lib/symcon -v /volume1/docker/Symcon/log:/var/log/symcon -v /volume1/docker/Symcon/root:/root --privileged -v /dev/ttyUSB0:/dev/ttyUSB0 symcon/symcon:latest
Die Pfade müssen ggf. angepasst werden.

In meinem Fall habe ich den Container nicht im Netzwerk „host“ sondern „bridge“ laufen. Ich bin leider kein Experte für Docker, deshalb kann ich den Unterschied nicht erklären und habe es so genommen wie es war (…und war froh, dass es funktioniert hat). Deshalb war der Befehl ein klein wenig anders. Außerdem habe ich den vorher genutzten Symcon-Container erst gelöscht, um die Ports wieder mappen zu können.
sudo docker run --name symcon_usb --net=„bridge“ -v /volume1/docker/Symcon/lib:/var/lib/symcon -v /volume1/docker/Symcon/log:/var/log/symcon -v /volume1/docker/Symcon/root:/root --privileged -v /dev/ttyUSB0:/dev/ttyUSB0 -p 3777:3777 symcon/symcon:latest

Es können natürlich weitere USB-Ports z.B. -v /dev/ttyUSB1:/dev/ttyUSB1 und weitere Ports gemapped werden.

1 „Gefällt mir“

Hallo,

falls da nochmal jemand drüber stolpert und kein privileged nehmen will.

Ein compose.yml in einem Ordner erstellen.

version: '3'
services:
  my_container:
    image: ubuntu:latest  # You can use any base image you prefer
    tty: true            # Allocate a pseudo-TTY
    stdin_open: true      # Keep STDIN open
    command: /bin/bash    # Start the container with a Bash shell
    devices:
      - /dev/bus/usb:/dev/bus/usb  # Forward the entire USB bus
    privileged: false

und dann per ssh auf den NAS, in den Order und ab da:

sudo docker-compose up -d
sudo docker-compose exec my_container /bin/bash

Dann landet man in seinem Container.
Dort apt update && apt install usbutils.

Mit lsusb seht ihr jetzt die USB devices. Und zwar auch im Format Bus: 001 Device: 003 Name

Dann könnt ihr den Pfad oben ändern auf /dev/bus/usb/001/003:/dev/bus/usb/001/003 oder welche zwei Zahlen auch immer zu eurem Gerät gehören.

Danach wieder sudo docker-compose up -d und ihr könnt im container auf das Device zugreifen.
Ich habe es noch nicht mit sigbee adaptern probiert. Aber es funktioniert ohne prviliged. Und es funktioniert mit einem DVB-T stick und rtl_433.

Außerdem könnt ihr restart: unless-stopped benutzen, dann sollte das auch bei jedem Neustart brav so bleiben.

Schlussendlich sudo docker-compose down und alles ist wieder sauber aufgeräumt.