USB Device an Docker-Container

Status
Für weitere Antworten geschlossen.

auamanu

Benutzer
Mitglied seit
22. Okt 2016
Beiträge
20
Punkte für Reaktionen
0
Punkte
0
Hallo Leute,

ich brauche mal eure Hilfe.

Bei mir läuft Docker auf einer DS416play und nun möchte ich gerne einen USB-868Mhz-Empfänger der an der DS angeschlossen ist an einen Docker-Container übergeben.

Wenn ich über die Konsole via

Rich (BBCode):
docker run -d -t --device="/dev/usb/hiddev8" debian:8.0

einen Container erstelle ist das Device auch an den Container gebunden und nutzbar. Sobald ich den Container aber neu starte ist das Device weg und ich bekomme es auch nicht mehr rein.

Habe schon versucht im "@docker" Verzeichnis die zugehörige "hostconfig.json" entsprechend zu bearbeiten, die Anpassung bei "Device" wird aber immer überschrieben (selbst wenn ich die Datei auf Read-Only setze???). Den Container zu exportieren, dort die Config ändern und wieder importieren funktioniert ebenfalls nicht...

Kennt jemand eventuell eine Möglichkeit wie ich das Device dauerhaft da rein bekomme?
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.468
Punkte für Reaktionen
356
Punkte
103
Vermutlich wirf der Synology Wrapper um Docker den Parameter einfach weg.

Evtl. klappt es mit dem Umweg über docker-compose.

Neuen Container anlegen und starten: docker-compose up -d
Laufenden Container stoppen (graceful): docker-compose stop (Container wird nicht gelöscht!)
Laufenden Container stoppen (forced): docker-compose kill (Container wird nicht gelöscht!)
Bestehenden Container starten: docker-compose start
Nicht laufenden Container löschen: docker-compose rm
 

caravandriver

Benutzer
Mitglied seit
27. Dez 2016
Beiträge
23
Punkte für Reaktionen
0
Punkte
1
Hier weiter gekommen? Ich möchte gerne zwei Devices Übergeben (ttyUSB0 + ttyUSB1). Es gibt bereits einen fertigen von mir angepassten container. Wie gebe ich ihm die devices mit?
 

auamanu

Benutzer
Mitglied seit
22. Okt 2016
Beiträge
20
Punkte für Reaktionen
0
Punkte
0
Jain, ich habe das nun etwas anders gelöst.

Wenn du über SSH einen neuen Docker Container erstellst, kannst du die Option "--privileged" nutzen.

z. B.
Rich (BBCode):
docker run -t -i --privileged ubuntu bash

Damit erhält der Container vollen Zugriff auf das Hostsystem und alle daran angeschlossenen Geräte. Zwar nicht optimal, aber funktioniert.

Container die vom Inet aus erreichbar sind würde ich aber so auf keinen Fall laufen lassen! Ich hab da nur meinen Homematic-Stick laufen und übergeb das in einem privaten LAN an FHEM :)
 

caravandriver

Benutzer
Mitglied seit
27. Dez 2016
Beiträge
23
Punkte für Reaktionen
0
Punkte
1
Habs rausgefunden, geht auch in der Gui!

Man muss nur den Schalter "Container mit hoher Priorität ausführen" anhaken.
 

auamanu

Benutzer
Mitglied seit
22. Okt 2016
Beiträge
20
Punkte für Reaktionen
0
Punkte
0
Kommst du dann auch auf alle Geräte drauf? Hatte das bei mir auch versucht, hat aber nur über die Konsole funktioniert?
 

domi1893

Benutzer
Mitglied seit
25. Apr 2014
Beiträge
4
Punkte für Reaktionen
0
Punkte
1
Jain, ich habe das nun etwas anders gelöst.

Wenn du über SSH einen neuen Docker Container erstellst, kannst du die Option "--privileged" nutzen.

z. B.
Rich (BBCode):
docker run -t -i --privileged ubuntu bash

Damit erhält der Container vollen Zugriff auf das Hostsystem und alle daran angeschlossenen Geräte. Zwar nicht optimal, aber funktioniert.

Container die vom Inet aus erreichbar sind würde ich aber so auf keinen Fall laufen lassen! Ich hab da nur meinen Homematic-Stick laufen und übergeb das in einem privaten LAN an FHEM :)


Dürfte ich fragen, wie du das gemacht hast mit dem Übergeben? Ich habe Jeedom in Docker installiert und habe es am laufen gehabt mit der "privileged" Option. Allerdings ist mir das irgendwie zu heiß mit dem vollen Zugriff. Gibt es eine Möglichkeit, den USB Stick in einem "Stand Alone" Container zu mounten und dann zu übergeben?

Danke und Grüße
 

bishop666

Benutzer
Mitglied seit
25. Aug 2012
Beiträge
16
Punkte für Reaktionen
0
Punkte
1
Ist man hier weiter gekommen? Ich würde gerne die hinteren 2 usb port im Docker weitergeben, wie mache ich das?
Würde ungern "Container mit hoher Priorität ausführen" anhaken, wobei das bei mir nicht funktioniert.
 

kev.lin

Benutzer
Mitglied seit
17. Jul 2007
Beiträge
623
Punkte für Reaktionen
38
Punkte
48
Hallo,

ja, ich bin ein Stück weiter gekommen. Ich mache es derzeit so, dass ich in der docker-compose.yml zwei Devices an den Container weiterreiche:
Rich (BBCode):
devices:
   - "/dev/ttyACM0:/dev/ttyACM0"
   - "/dev/ttyUSB0:/dev/ttyUSB0"
Dafür müssen aber parallel auf dem Host-System (DiskStation) Module nachgeladen werden - dies muss nach jedem Neustart der DiskStation wiederholt werden:
Rich (BBCode):
sudo insmod /lib/modules/usbserial.ko
sudo insmod /lib/modules/ftdi_sio.ko
Nun sollte die beiden Devices erkannt werden und unter
Rich (BBCode):
/dev/
zu finden sein. Als nächstes müssen die Rechte für die Devices angepasst werden, damit der Container darauf zugreiffen kann:
Rich (BBCode):
sudo chmod -R 0777 /dev/ttyACM0
sudo chmod -R 0777 /dev/ttyUSB0
Wenn ich dann den Container mit
Rich (BBCode):
sudo docker-compose up -d
starte, sind die Devices im Container vorhanden und ansprechbar.
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.468
Punkte für Reaktionen
356
Punkte
103
Der erste Start des Container über die Kommandoziele ist nie da Problem.
Stimmt, mit Compose über die Shell bekommt man eine sinnvolle Lösung hin.

Frage:
Sind die Devices nach einem Neustart des Containers (egal ob durch die UI oder NAS Neustart) nicht weg?

Ich würde davon ausgehen, dass es stabil funktioniert ,wenn du folgendes tust:
1. Ab dem Ins-Mod Block alle Befehle in einen Start-Task packen
2. Restart policy auf on-failure stellen.
3l Falls die Device nach einem Neustart trotzdem weg sein sollte, die Container beim beenden mit docker-compose down "zerstören" .

Vielleicht motiviert es ja endlich mal die "Ich will nicht auf die Shell! Es mus über die UI gehen, sonst will ich das nicht"-Fraktion das so auch einzusetzen :)
 
Zuletzt bearbeitet:

kev.lin

Benutzer
Mitglied seit
17. Jul 2007
Beiträge
623
Punkte für Reaktionen
38
Punkte
48
...
Frage:
Sind die Devices nach einem Neustart des Containers (egal ob durch die UI oder NAS Neustart) nicht weg?
Stimmt, das ist leider der Fall.
...
Ich würde davon ausgehen, dass es stabil funktioniert ,wenn du folgendes tust:
1. Ab dem Ins-Mod Block alle Befehle in einen Start-Task packen
2. Restart policy auf on-failure stellen.
3l Falls die Device nach einem Neustart trotzdem weg sein sollte, die Container beim beenden mit docker-compose down "zerstören" .

Vielleicht motiviert es ja endlich mal die "Ich will nicht auf die Shell! Es mus über die UI gehen, sonst will ich das nicht"-Fraktion das so auch einzusetzen :)
Sorry, ich fange mit Docker gerade erst an, daher bin ich noch nicht so komplett im Bilde. Ein paar Fragen:
  1. Meinst Du ein Shell-Skript, welches ich z.B. per DSM-Aufgabenplaner aufrufen kann? Aber da könnte ich dann doch auch schon die Modul-Aufrufe mit reinpacken, oder nicht?
  2. im Docker-compose-file?
  3. Ist das ein Unterschied, ob ich den Container einfach beende (also per DSM Docker App) oder den Container explizit per
    Code:
    docker-compose down
    runterfahre?
 
Zuletzt bearbeitet:

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.468
Punkte für Reaktionen
356
Punkte
103
Zu 1&2) Ja, enteder packst Du den Inhalt von Deinem Skript in den Taskplaner oder den Aufruf vom Skript.
Wichtig vor 'docker-compose up -d' muss du natürlich in das Verzeichnis mit der docker-compose.yml wechseln
zu 3) Ja, bei 'down' wird alles "zerstört" einschließlich dem "kaputtmachen" der Konfiugration durch die Syno GUI. Daher ist wichtig, dass alles was später nicht verloren gehen soll über Volumes auf den Host gemapped wird.
Bei 'halt' werden die Container nur angehalten, so dass ich mir vorstellen kann das die Syno GUI hier die Konfiguration wieder kaputtmacht.

Erst mit Docker Swarm wird ein Container bei jedem Start neu erzeugt... Aber das können wir eh nicht nutzen (obwohl die Docer-Version das könnte...)
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat