Jdownloader unter Docker. Erstellte Ordner gehören root. Änderbar?

mw211

Cadet 1st Year
Registriert
Dez. 2021
Beiträge
13
Ich habe einen Raspberry auf dem Docker und Jdownloader laufen.
Die Downloads landen auf einer externen Festplatte, auf die ich über Samba zugreifen kann.

Nun möchte ich die heruntergeladen Dateien über meinen Windows PC verschieben und bearbeiten. Das darf ich jedoch nicht weil mir die root rechte fehlen.
Hab folgendes versucht:
"sudo chmod 777 Downloads"
Außerdem habe ich dem User mit dem ich zugreife in der /etc/sudoers.tmp alle rechte gegeben.

Hat beides nicht geholfen, weil die heruntergeladenen Dateien root gehören und ich sie deshalb nur lesen aber nicht ändern darf.

Ich möchte nicht nach jedem Download die rechte der neuen Datei ändern, oder sie über das Terminal löschen müssen nachdem ich sie kopiert habe.

Hat jemand eine Idee?
 
Der User im Container, der die Dateien/Ordner erstellt, muss ein anderer sein.
Ggf. bietet dein Image die Möglichkeit UID/GID mitzugeben, dann kannst du diese auf einen lokalen entsprechend Mappen und die Ordner sind dann von diesem User erstellt und zugreifbar.
 
  • Gefällt mir
Reaktionen: mw211
Ich kenne mich mit Docker noch nicht so gut aus.
Ich habe einfach das folgende Video nachgemacht.


In der Portaineroberfläche sehe ich keine möglichkeit die USER_ID zu setzen.
Ergänzung ()

Donnidonis schrieb:
Außerdem kannst du die UMASK setzen.
Habe ich gemacht. Hat auch nicht geholfen.

[nas]
comment = DietPi nas
path = /mnt/nas
read only = no
browseable = yes
create mask = 0777
directory mask = 0777
force create mode = 0777
force directory mode = 0777
valid users = root manuel
writable = yes
max connections = 8
 
Zuletzt bearbeitet:
Du musst das beim erstellen des Docker Containers als ENV Variable setzen. nicht in der Ambulanz.conf damit es richtig angelegt wird. In dem Github Link sind die ENV Variablen beschrieben.

Ich empfehle aber sich grundsätzlich erstmal mehr mit Docker zu beschäftigen, wenn es da noch hapert.
 
  • Gefällt mir
Reaktionen: mw211
Das ganze geht auch mit Portainer, der erlaubt durchaus ENV Variablen zu setzen. Das muss nur genutzt werden, dann reicht das schon aus.
 
  • Gefällt mir
Reaktionen: mw211
Donnidonis schrieb:
Du musst das beim erstellen des Docker Containers als ENV Variable setzen. nicht in der Ambulanz.conf damit es richtig angelegt wird. In dem Github Link sind die ENV Variablen beschrieben.

Das hat leider auch nicht funktioniert.

root@DietPi:~# id manuel
uid=1001(manuel) gid=1001(manuel) groups=1001(manuel)

Hab ich so bei ENV eingegeben.

Ich kann die heruntergeladenen Archive entpacken und dann löschen. Das Problem besteht nur, wenn ich den Jdownloader entpacken lasse. Dann ist der entpackte Ordner geschützt.
Wieso ist der entpackte Ordner im root Eigentum und die .rar Dateien nicht?
Ergänzung ()

Donnidonis schrieb:
Ich empfehle aber sich grundsätzlich erstmal mehr mit Docker zu beschäftigen, wenn es da noch hapert.
Damit hast du natürlich recht. Ich möchte allerdings nur, dass 4 Programme unter Docker laufen und damit ist das Thema für mich erst mal erledigt. 3/4 laufen. Nur hier hab ich Probleme.
 
Wie sehen denn die settings in portainer aus ?
Zeig Mal ein docker top vom jdownloader Container, da sollten die User der Prozesse zu sehen sein.
 
  • Gefällt mir
Reaktionen: mw211
Kyze schrieb:
Wie sehen denn die settings in portainer aus ?
Welche Settings meinst du genau?

Kyze schrieb:
Zeig Mal ein docker top vom jdownloader Container, da sollten die User der Prozesse zu sehen sein.
UID PID PPID C STIME TTY TIME CMD
root 3465 3444 0 Feb14 ? 00:00:00 /bin/sh /opt/JDownloader/daemon.sh
root 3587 3465 0 Feb14 ? 00:05:35 java -Dsun.jnu.encoding=UTF-8 -Dfile.encoding=UTF-8 -Djava.awt.headless=true -jar /opt/JDownloader/app/JDownloader.jar -norestart

Keine Ahnung, wieso da root drin steht. Ich habe beim installieren unter ENV UID 1001 eingetragen.
 
Du mußt die IDs im RUN-Kommando des Dockers deklarieren mit dem -e Switch:

Rich (BBCode):
docker run -d \
    --name=jdownloader-2 \
    -p 5800:5800 \
    -e USER_ID=1001 \
    -e GROUP_ID=1001 \
    -v /docker/appdata/jdownloader-2:/config:rw \
    -v /home/user/Downloads:/output:rw \
    jlesage/jdownloader-2

Wenn die IDs in der ENV-Datei definiert sind kannst du auch die Variablen nutzen:

Rich (BBCode):
docker run -d \
    --name=jdownloader-2 \
    -p 5800:5800 \
    -e USER_ID=$UID \
    -e GROUP_ID=$GID \
    -v /docker/appdata/jdownloader-2:/config:rw \
    -v /home/user/Downloads:/output:rw \
    jlesage/jdownloader-2
 
Zuletzt bearbeitet: (Backslashes vergessen :))
  • Gefällt mir
Reaktionen: mw211
Ich meine das RUN-Commando des Containers um die Variablen überhaupt erst zu deklarieren
 
Das RUN-Kommando ist für die direkte Erstellung in der Bash. Bei Portainer erstellst du einen Container und gibst es dabei an. Also Container entfernen und beim Neuerstellen die Env-Variablen einfügen im Prozess der Erstellung.

Deshalb nutze ich Docker-Compose-Skripte zum Erstellen. Da wird alles definiert und dann auf Kommando der ganze Stack gebaut.

EDIT: Im Tutorial auf Youtube wird das auch gezeigt ;).
 
Zuletzt bearbeitet:
Habe es jetzt über Stacks versucht.

Code:
services:
   jdownloader:
    image: jaymoulin/jdownloader
    container_name: jdownloader
    restart: always
    user: 1001:1001
    volumes:
        - /portainer/Files/AppData/Config/JDownloader:/opt/JDownloader/app/cfg
        - /mnt/nas/Downloads:/opt/JDownloader/Downloads
    environment:
            MYJD_USER: meinemail
            MYJD_PASSWORD: meinpasswort
            MYJD_DEVICE_NAME: dietpi
    ports:
        - 3129:3129


Jetzt ist der Benutzer der richtige aber das Programm wird immer wieder beendet.
 
Zuletzt bearbeitet:
Habs hinbekommen.
Vielen Dank an alle die geholfen haben! ;-)
 
  • Gefällt mir
Reaktionen: mae1cum77
Ich hatte wie in dem Video die Version von jaymoulin benutzt.
Dann habe ich die von jlesage ausprobiert und damit hat über Portainer gleich alles beim ersten Versuch geklappt. Wie in #3 geschrieben.
 
  • Gefällt mir
Reaktionen: mae1cum77
Zurück
Oben