FUSE MOUNTPOINT in Docker vom Host anzeigen lassen

Status
Für weitere Antworten geschlossen.

Thomas126_a

Benutzer
Mitglied seit
29. Apr 2016
Beiträge
12
Punkte für Reaktionen
0
Punkte
0
Guten Tag liebe Community,
seit ein paar Tagen beschäftige ich mit Docker. Problematisch scheint aktuell zu sein, dass ich im Docker Container (privileged Modus war notwedig zum mounten) über FUSE ein externes Dateisystem einbinde. Das klappt auch problemlos. Nun würde ich gerne von der Diskstation darauf zugreifen. Dort wird der Ordner in der File Station aber als leer angezeigt. Gibt es einen direkten Weg es zu ermöglichen. Anderes herum geht das ja problemlos. Sollte dem nicht so sein welche weiteren Services die dies ermöglichen könnt ihr empfehlen (bspw. Samba, Webdav)? Einen SFTP Zugriff habe ich derweil schon eingerichtet. Dieser ist auch in der Diskstation zu öffnen und zeigt alle Inhalte richtig an. Gibt es einen Weg diesen Zugang an einen Ordner zu binden und damit auch für weitere Andwendungen verfügbar zu machen?

Liebe Grüße,
Thomas
 
Zuletzt bearbeitet:

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.468
Punkte für Reaktionen
356
Punkte
103
Warum mountest Du das Dateisystem nicht direkt in der Syno? Versuchst Du eine NTFS-Festplatte zu mounten?
Was ist den Dein Use-Case? Vielleicht hat jemand ja noch eine ganze andere evtl. deutlich galantere Lösung für Dich..

Aber zurück zu deinem Teilproblem:
Normalerweise werden Dateisysteme/Remote-Shares im Docker-Host gemountet - in diesem Fall deine Syno - und Verzeichnisse werden als Volumes in Container gemapped.
Daher benötigen Container für gewöhnlich auch keinen privilleged mode.

Wenn der Zugriff über SFTP schon funktioniert, verwende doch einfach SSHFS um die Verzeichnisse in deiner Syno zu mounten. Unter der Haube verwendet es auch nur SFTP.
Wenn du mit Zertifikats-Authentifizierung arbeitest geht das mounten dann auch ohne Eingabe von Credentials (evtl. nicht nötig wenn in /etc/fstab eingetragen oder über das sshfs spk einbunden)

In den SynoCommunity Paketquellen gibt es das "sshfs v2.5-1" SPK Paket dafür...
 

Thomas126_a

Benutzer
Mitglied seit
29. Apr 2016
Beiträge
12
Punkte für Reaktionen
0
Punkte
0
Vielen Dank erstmal für deine Antwort. Das Problem ist anders herum. Ordner in Docker einbinden klappt problemlos. Ich versuche aber in Docker eine über ACD_CLI gemounteten Zugang zu Amazon Cloud Drive für die Diskstation benutzbar zu machen, sprich Zugang von dieser aus zu gewährleisten. Letzendlich soll darüber dann Plex Zugriff haben. Wie gesagt mit SFTP klappt es problemlos. Dein SSHFS Lösungsansatz klingt schon einmal nach einer Option. SOllte jemand einen eleganteren Weg kennen, würde ich mich über einen Mitteilung sehr freuen. Als Alternative habe ich auch überlegt 2 Docker Container anzulegen, in einem läuft der Zugang zu ACD und im anderen Plex. Wie schaut es mit dem Datenaustausch unter Container aus? Ist der leichter zu konfigurieren?

Frohes Fest euch allen!
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.468
Punkte für Reaktionen
356
Punkte
103
Es gibt wohl ein ACD Plugin für Syno, aber nur zum Synchen und nicht für den Live-Zugriff.

Der Weg von einem Container in den anderen ist eigentlich "sauberer" als den Umweg über die Syno.


Datenaustausch über Container ist relativ easy:

Container ACD,
- im Dockerfile ist bspw ein volume in Verzeichnis /mnt/acd angegeben
- Der Container mapped kein lokales Syno-Verzeichnis in den Container, sprich: die Daten aus /mnt/asd sind "lokal"
Container Plex (bspw. offizielles Plex-Docker Image):
- mapped ein Syno-Verzeichnis als Volume in den Container für die Plex config
- mapped n Syno-Verzeichnisse als Volume in den Container für Medien
- verwendet als run parameter –volumes-from "Container ACD" um ALLE volumes vom Container ACD lokal am selben Pfad einzubinden

Die Volumes können jeweils über die Kommandozeile gemapped werden.

Am besten schraubst Du dir dafür eine docker-compose.yml zusammen und startest Deinen Container-Verbund erstmalig von der Shell.
 

Thomas126_a

Benutzer
Mitglied seit
29. Apr 2016
Beiträge
12
Punkte für Reaktionen
0
Punkte
0
Es gibt wohl ein ACD Plugin für Syno, aber nur zum Synchen und nicht für den Live-Zugriff.

Der Weg von einem Container in den anderen ist eigentlich "sauberer" als den Umweg über die Syno.


Datenaustausch über Container ist relativ easy:

Container ACD,
- im Dockerfile ist bspw ein volume in Verzeichnis /mnt/acd angegeben
- Der Container mapped kein lokales Syno-Verzeichnis in den Container, sprich: die Daten aus /mnt/asd sind "lokal"
Container Plex (bspw. offizielles Plex-Docker Image):
- mapped ein Syno-Verzeichnis als Volume in den Container für die Plex config
- mapped n Syno-Verzeichnisse als Volume in den Container für Medien
- verwendet als run parameter –volumes-from "Container ACD" um ALLE volumes vom Container ACD lokal am selben Pfad einzubinden

Die Volumes können jeweils über die Kommandozeile gemapped werden.

Am besten schraubst Du dir dafür eine docker-compose.yml zusammen und startest Deinen Container-Verbund erstmalig von der Shell.

Soweit bin ich deiner Anleitung gefolgt. Der Punkt "verwendet als run parameter –volumes-from "Container ACD" um ALLE volumes vom Container ACD lokal am selben Pfad einzubinden" läuft vermtlich über SSH. Lässt sich dieser Prozess in DSM einstellen und ist der aus dem ACD Container geteilte Ordner dann auch genau gleich einsehbar, sprich der mit acdCLI gemountete Ordner wird in Plex ordnungsgerecht angezeigt? Der Verbund lässt sich innerhalb von DSM mit Links verbinden oder verstehe ich das falsch? Auch lässt sich ein lokaler Ordner über DSM nicht direkt anlegen, es wird immer ein pendant vom Host erwartet. Das wäre allerdings weniger problematisch wenn der Zugriff trotzdem gewährleistet ist.
 

goetz

Super-Moderator
Teammitglied
Sehr erfahren
Mitglied seit
18. Mrz 2009
Beiträge
13.999
Punkte für Reaktionen
264
Punkte
373
Hallo,
@Thomas126_a
bitte keine Vollzitate und erst recht nicht wenn Du direkt antwortest.
Danke.

Gruß Götz
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.468
Punkte für Reaktionen
356
Punkte
103
Prinzipiel werden Docker-Container, die Du über docker-compose oder docker auf der Shell startest auch in der Docker-UI in der Syno angezeigt.

Hatte total übersehen, dass im Reiter "Links" genau das gemacht werden kann. Ehrlich gesagt erzeuge ich selber die Laufzeit-Parameter für einen Verbund am liebsten mit docker-compose, da die Konfiguration so reproduzierbar in einer Datei abgelegt ist.

Lässt sich dieser Prozess in DSM einstellen und ist der aus dem ACD Container geteilte Ordner dann auch genau gleich einsehbar, sprich der mit acdCLI gemountete Ordner wird in Plex ordnungsgerecht angezeigt
Das ist genau das Ziel!

Nur mal interesse halber: Du verwendest das remote ACD wie einen lokalen Datentopf und sparst Dir im Grunde nur den regelmäßigen Neukauf von (größeren) Festplatten?
Es würde mich wundern, wenn Plex erkennen würde das die Daten auf ACD liegen und den Clients die ACD-Url für den Stream übergibt.
 

Thomas126_a

Benutzer
Mitglied seit
29. Apr 2016
Beiträge
12
Punkte für Reaktionen
0
Punkte
0
Das ist genau das Ziel!
Das Ziel war ja schon formuliert. Leider konnte ich deiner Anleitung nicht ganz folgen. Wie kann ich denn konkret ein Volume eines anderen Container miteinander teilen? Gibt es da einen Weg über die DSM Docker Oberfläche.

Plex arbeitet die meiste Zeit problemlos. Ist erstmal nur ein Experiment und bedarf etwas mehr Zeit um die Funktionalität bewerten zu können.

Danke nochmal an alle Antworten!
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.468
Punkte für Reaktionen
356
Punkte
103
Was Du technisch willst ist das hier: https://docs.docker.com/engine/tuto...creating-and-mounting-a-data-volume-container, nur mit dem Unterschied, dass Du volumes von einem Container mit laufendem Prozess verwendest...die erste Zeile indem ein reiner Daten-Container angelegt wird kannt Du überspringen, da Du ja den acdCli Container stattdessen verwenden willst.

Ob das nun über den Reiter "Links" oder welchen auch immer geht: keine Ahnung... ich erzeuge meine Container immer über die shell, entweder baue ich mir dazu ein docker-compose.yml oder ein bash-script.
 

Thomas126_a

Benutzer
Mitglied seit
29. Apr 2016
Beiträge
12
Punkte für Reaktionen
0
Punkte
0
Okay werde mich durcharbeiten. Vielen Dank für deine Antworten. Eine Frage hätte ich abschließend noch. Warum es für für den Host nicht möglich den in Docker gemounteten ACD Speicher anzuzeign. Dieser bleibt bei mir in DSM leer. Der gleiche Ordner in Docker zeigt alles richtig an. Gibt es einen Weg diesen zugänglich zu machen?
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.468
Punkte für Reaktionen
356
Punkte
103
Docker Volumes sind dafür gedacht Daten-Container oder Verzeichnisse vom Host in den Container einzublenden. Beim Einblenden wird der Zielpfad überlagert (mittels mount --bind).
Ein Mounpoint kann dabei nicht gleichzeitig auch als Pfad für ein Volume Mapping dienen, da das Ziel überlagert werden würde.

Evtl. hilft es den Mountpoint unterhalb des Volume Mapping zu legen:
- acd_cli gegen /mnt/acd/mount zu mounten und dessen Vaterverzeichnis /mnt/acd/ als Volume mappen. Damit läge Dein Mountpoint innerhalb des Volumes.
- acd_cli gegen /mnt/acd mounten und ein weiteres Verzeichnis bspw. /mnt/acd_share erzeugen und mit mount --bind /mnt/acd /mnt/acd_share/acd oder ln -s /mnt/acd /mnt/acd_share/acd (ob das klappt) einen Symlink setzen. Damit läge Dein Mountpoint ausserhalb des Volums
- Hast du sshfs ausprobiert?

Evtl. kommst Du an die Daten über den Pfad /volume1/@docker/volumes heran.
Code:
docker inspect -f '{{ json .Mounts }}' {container id}| python -m json.too
Einer der dort angezeigten Source-Pfade liegt unterhalb /volumex/@docker/volumes. Schau mal da rein, evtl. ist Dein Mountpoint da drin... Wobei ich es kaum glaube.
 

Thomas126_a

Benutzer
Mitglied seit
29. Apr 2016
Beiträge
12
Punkte für Reaktionen
0
Punkte
0
- acd_cli gegen /mnt/acd/mount zu mounten und dessen Vaterverzeichnis /mnt/acd/ als Volume mappen. Damit läge Dein Mountpoint innerhalb des Volumes.
- acd_cli gegen /mnt/acd mounten und ein weiteres Verzeichnis bspw. /mnt/acd_share erzeugen und mit mount --bind /mnt/acd /mnt/acd_share/acd oder ln -s /mnt/acd /mnt/acd_share/acd (ob das klappt) einen Symlink setzen. Damit läge Dein Mountpoint ausserhalb des Volums

Ersteres habe ich schon ausprobiert. Leider nicht erfolgreich. Müssen die Befehle vom Host verarbeitet werden? Eine kurze Recherche gibt mir folgende Befehle an:
mount --bind /mnt/ /mnt/
mount --make-shared /mnt/
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.468
Punkte für Reaktionen
356
Punkte
103
Das Tor zu Welt ist dein Volume... sprich: mount --bind und die Symlink Geschichte müssen innerhalb des Containers ausgeführt werden und die "Wirkung" wird durch Dein Volume (sprich dem mount --bind eines Host-Verzeichnisses in ein Container-Verzeichnis) nach aussen sichtbar.
 

Thomas126_a

Benutzer
Mitglied seit
29. Apr 2016
Beiträge
12
Punkte für Reaktionen
0
Punkte
0
sprich dem mount --bind eines Host-Verzeichnisses in ein Container-Verzeichnis) nach aussen sichtbar.
Aber wie kann ich das überhaupt bewerkstelligen. Wenn ich einen Pfad innerhalb des Conatainer über Mount bind angeben muss ist der doch immer abhängig vom Dateisystem des Containers und nicht vom Host. Folgendes habe ich ausprobiert und es hat nicht geklappt. In Container wird ein Host Pfad angezeigt, dieser beläuft sich auf /Home/. Dort hab ich zwei Verzeichnisse. Einmal ACD und Test. Im Ordner ACD wird natürlich der Service gemountet. Dann habe ich mittels Mount bind ACD und Test miteinander verbunden. Im Hostdateisystem wird das Verzeichnis als leer angezeigt.
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.468
Punkte für Reaktionen
356
Punkte
103
Wir drehen uns hier im Kreis.

Welches Image verwendest Du? bzw. wenn Du eins selber gebaut hast, poste doch mal Deinen Dockerfile.
Wie erzeugst Du aus dem Image Deinen Container? Idealerweise Angabe als 'docker run -ti -v host/pfad:container/pfad {image-id oder tag}.
In welchen Container-Pfad mountest Du ACD?
 

Thomas126_a

Benutzer
Mitglied seit
29. Apr 2016
Beiträge
12
Punkte für Reaktionen
0
Punkte
0
Tut mir Leid. Bin in Sachen Docker noch nicht richtig durchgestiegen. Also habe das Image tutum/ubuntu mit dem Tag latest genommen. Dieses auf 16.04 geupdatet und dann ACD Cli mit Hilfe von Root an /Home/User/acdcli gemountet. Der Pfad ab /Home/ ist vom Host auf erreichbar unter /volume1/docker/ubuntu/home

Ich verwende das docker GUI in dsm.
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.468
Punkte für Reaktionen
356
Punkte
103
Die Antwort passt.

Du hast also das Volume Mapping /volume1/docker/ubuntu/home:/Home und acdcli liegt in dessen Unterverzeichnis.
Da Dein Mountpoint unterhalb des gemappten Volumes liegt würde ich jetzt erwarten, dass Deine Dateien im Host unter /volume1/docker/ubuntu/home/User/acdcli zu finden wären.
Was aber scheinbar nicht der Fall ist.

Versuchen wir mal acdcli ausserhalb zu mounten und über 'mount --bind' in das Volume einzublenden.
- 1. acdcli nach /mnt/acdcli mounten
- 2 mount --bind /mnt/acdcli /Home/User/acdcli

Wenn das auch nicht funktioniert. Dann wird das was Du vor hast nicht über Volumes funktionieren.

Du hast auch keine Rückmeldung zu sshfs gemacht - ich könnte mir vorstellen, dass es damit funktioniert.
Und auch zu 'docker inspect -f '{{ json .Mounts }}' {container id}| python -m json.too' nicht
 
Zuletzt bearbeitet:

Thomas126_a

Benutzer
Mitglied seit
29. Apr 2016
Beiträge
12
Punkte für Reaktionen
0
Punkte
0
Habe beides erfolglos ausprobiert. Der Inhalt wird nicht außerhalb des Dockers angezeigt. Das Paket SSHFS habe ich bereits installiert und probiere es darüber. Wie mounte ich denn jetzt einen SFTP Zugang an einen Ordner? Einfach per SSH wie hier beschrieben: https://wiki.ubuntuusers.de/FUSE/sshfs/???

Auf der anderen Seite wenn ich sowieso FUSE mit SSHFS intallieren muss, was spricht dagegen ACDCLI direkt über die Box laufen zu lassen? Nur die Installation scheint wegen fehlender Quellen deutlich für Anfänger erschwert.
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.468
Punkte für Reaktionen
356
Punkte
103
Schade das es über die volumes nicht funktioniert hat.

Bzgl. des sshfs Packets hätte ich gedacht, dass es mit einer hübschen ui daher kommt - was leider nicht der Fall ist.
Im Grunde bekommst Du die beiden Binaries direkt im path abgelegt geliefert: /usr/local/bin/sshfs und usr/local/bin/fusermount.
Die lib files bekommst Du unter /usr/local/sshfs/lib abgelegt. Sieht nach einer vollständigen Fuse installation aus .

Damit solltest Du dir eine der unter dem Unbutu-Link beschriebenen Varianten aussuchen. Allerdings ergibt das Ganze nur mit zertifikatsbasierter Authentifizierung einen Sinn.

Ich hab exemplarisch ein fs über sshfs eingebunden (allerdings mit Passworteingabe):
Code:
sudo sshfs -o allow_other root@192.168.200.4:/ /mnt/test


Falls Du acdcli direkt auf der Syno zum laufen bekommst, ist das natürlich des bessere Weg :)
 
Zuletzt bearbeitet:
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