Docker Datei-Berechtigungen im Host-System

Odhrean666

Benutzer
Mitglied seit
17. Jun 2020
Beiträge
10
Punkte für Reaktionen
4
Punkte
9
Docker ist noch immer eine Welt die ich nicht 100% verstehe und ich werde grad wahnsinnig beim Versuch ein Problem zu verstehen.
Vielleicht ist die Lösung ganz einfach, aber ich drehe mich bei der Suche nach einer Lösung im Kreis. Ich freue mich über jede Hilfe.

Ich habe folgendes Problem:

Ich möchte mithilfe des Docker Container dskaggs/docker-organize:latest Dateien in einem Quell-Verzeichnis (/source) durchsuchen und mithilfe von Regeln verarbeiten lassen. Der Container benennt die Dateien um und verschiebt Sie in die entsprechende Ordnerstruktur in /Dokumente.

Das Problem: Die einsortierten Dateien haben den owner root:root und sind damit ohne ein chown nicht weiter nutzbar.

Was muss ich machen damit die vom Container verarbeiteten Dateien im Host-System dieselben User-Berechtigungen haben wie die Quell Datei oder zumindest der Gruppe users gehören?

Ich starte den Container mit folgendem Befehl:

Bash:
docker run -it --rm --name organize \
-v "/volume1/docker/organize/config":/root/.config/organize/ \
-v "/volume1/docker/organize/log":/var/log/organize/ \
-v "/volume1/Scans":/source \
-v "/volume1/Dokumente":/Dokumente \
dskaggs/docker-organize:latest


Ich habe versucht mittels option --user 1044:100 die id's eines Host-Users zu übergeben, doch dann läuft das python Script im Container nicht mit folgender Fehlermeldung:
Code:
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/pathlib.py", line 1284, in mkdir
    self._accessor.mkdir(self, mode)
FileNotFoundError: [Errno 2] No such file or directory: '/.config/organize'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/bin/organize", line 5, in <module>
    from organize.cli import main
  File "/usr/local/lib/python3.8/site-packages/organize/__init__.py", line 28, in <module>
    folder.mkdir(parents=True, exist_ok=True)
  File "/usr/local/lib/python3.8/pathlib.py", line 1288, in mkdir
    self.parent.mkdir(parents=True, exist_ok=True)
  File "/usr/local/lib/python3.8/pathlib.py", line 1284, in mkdir
    self._accessor.mkdir(self, mode)
PermissionError: [Errno 13] Permission denied: '/.config'


Die Datei und der Ordner /volume1/docker/organize/config die im Fehler bemängelt werden haben dieselbe User ID die ich beim aufruf übergeben habe.

EDIT: Beim schreiben habe ich mir die Fehlermeldung mal genauer angesehen und das Start-Script wie folgt angepasst:
Bash:
docker run -it --rm --name organize-runOne \
--user 1044:100 \
-v "/volume1/docker/organize/config":/.config/organize/ \
-v "/volume1/docker/organize/log":/.cache/organize/ \
-v "/volume1/docker/organize/log":/var/log/organize/ \
-v "/volume1/Scans":/source \
-v "/volume1/Dokumente":/Dokumente \
dskaggs/docker-organize:latest \
"0 * * * *"
Dann kommt zumindest die Fehlermeldung nicht mehr aber nach dem start der interaktiven shell habe ich mit ls -ls die Berechtigungen angesehen.
Kann zwar die gemounten Ordner öffnen, aber das wars dann auch. Alles andere im Container ist mit root nicht zugänglich....
Code:
I have no name!@98245994a021:/$ ls -ls
total 4
0 drwx------   1 1044 users   314 Aug 11 09:01 Dokumente
0 drwxr-xr-x   1 root root   880 Aug 27 14:10 bin
0 drwxr-xr-x   1 root root     0 Jul 10 21:04 boot
0 drwxr-xr-x   5 root root   360 Oct 26 21:00 dev
4 -rwxr-xr-x   1 root root   281 Aug 27 14:10 entrypoint.sh
0 drwxr-xr-x   1 root root  1622 Oct 26 21:00 etc
0 drwxr-xr-x   1 root root     0 Jul 10 21:04 home
0 drwxr-xr-x   1 root root    84 Aug 27 14:10 lib
0 drwxr-xr-x   1 root root    40 Aug  3 07:00 lib64
0 drwxr-xr-x   1 root root     0 Aug  3 07:00 media
0 drwxr-xr-x   1 root root     0 Aug  3 07:00 mnt
0 drwxr-xr-x   1 root root     0 Aug  3 07:00 opt
0 dr-xr-xr-x 687 root root     0 Oct 26 21:00 proc
0 drwx------   1 root root    92 Aug 27 14:11 root
0 drwxr-xr-x   1 root root    26 Aug 27 14:10 run
0 drwxr-xr-x   1 root root  1044 Aug  3 07:00 sbin
0 drwx------   1 1044 users  524 Oct 26 20:57 source
0 drwxr-xr-x   1 root root     0 Aug  3 07:00 srv
0 dr-xr-xr-x  12 root root     0 Sep 21 17:50 sys
0 drwxrwxrwt   1 root root     0 Aug 27 14:11 tmp
0 drwxr-xr-x   1 root root    70 Aug  3 07:00 usr
0 drwxr-xr-x   1 root root    90 Aug  3 07:00 var
 
Zuletzt bearbeitet:

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.519
Punkte für Reaktionen
404
Punkte
103
Das was Du hier erlebst ist kein Docker Problem per-se.

Es ist einfach nur ein schlecht gemachtes Images, dass nicht darauf ausgelegt ist als nicht-root zu laufen.
Wenn es kein bestehendes Images gibt, dass auch mit eingeschränktem Benutzer läuft, hilt alles nichts um man muss selbst ein Image bauen.
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.519
Punkte für Reaktionen
404
Punkte
103
Meine letzte Antwort war sicherlich nicht sonderlich hilfreich...

Was muss ich machen damit die vom Container verarbeiteten Dateien im Host-System dieselben User-Berechtigungen haben wie die Quell Datei oder zumindest der Gruppe users gehören?
Das Image muss so geändert werden, dass a) ein nicht-priviligierter Benutzer erzeugt wird und b) für die Ausführung von Organize verwendet wird. Aktuell gibt es in dem Image keinen nicht-privligierte Benutzer, so dass der Organize-Prozess als root ausgeführt wird, was dazu führt das auch die erzeugten Dateien immer root gehören. Hier gibt es keinen Workaround, sondern das Image muss angepasst werden.

Leider scheint dskaggs/docker-organize:latest das einzige Container Image von Organize zur sein, so dass ein guter Startpunkt das Auschecken des Github-Projekts ist. Dann muss das Dockerfile angepasst werden, dass ein nicht-privligierte Benutzer angelegt wird. Dann modifiziert man das Skript scripts/entrypoint.sh, dass es /usr/local/bin/organize run als dieser nicht-priviligerter Benutzer startet.

Viel Erfolg!
 

Odhrean666

Benutzer
Mitglied seit
17. Jun 2020
Beiträge
10
Punkte für Reaktionen
4
Punkte
9
Danke für deinen Hinweis haydibe. Ich habe das Problem in meiner Unfähigkeit gesucht die richtige Konfiguration zu setzen, doch dein Hinweis hat mich darüber hinnaus suchen lassen.
Ich werde mich nun also mit Docker und dem erstellen von Containern beschäftigen ;)
Dazu habe ich z.B. folgenden Artikel gefunden: https://vsupalov.com/docker-shared-permissions/
Werde dort den Part "Build the right image" angehen und berichte dann hier.
 


 

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