Forum: PC-Programmierung Docker Mount im Container


von Maik (Gast)


Lesenswert?

Hallo,

ich baue gerade einen Container (Dockerfile)

Nur ein Volume/Ordner für persistente Daten soll eingebunden werden.

Aber an 3 Orten im File-System sollen persistente Daten liegen, für die 
Programme die dann im Container laufen.

Mein Plan: 2 Mounts in das eingebundene Volume, einhängen vor der 
Programmausführung. Final dann 3 persistente Speicherorte.

Problem:

Alle run mount-Befehle im Dockefile schlagen fehl (permission fehler)
Alle mount-Befehle im startscript des Containers schlagen fehl (ich 
dachte könnte ja auch da der mount erstellt werden, auch permission 
fehler)


Daher die Frage geht das Überhaupt ?

Also gehen generell Mounts im Container, oder Mounts in Volumes?

MfG

von KitKat (Gast)


Lesenswert?

draussen mounten, z.b. /data/eins /data/zwei /data/drei.

im Dockerfile nix machen (ausser evtl. eine "Volume"-Angabe)

im docker-compose.yml (oder in der docker cmdline beim Starten)
per "volumes" oder "-v" das host-verzeichnis in den Container biegen.

also

docker run -v /data/eins:/var/lib/somewhere -v 
/data/drei:/home/irgendwer irgendwas

dann hast du innerhalb des laufenden Containers Zugriff auf deine 
Storages, an den Pfaden die du angegeben hast.

von Maik (Gast)


Lesenswert?

Hallo,

ja jeden Ordner von draußen rein mounten funktioniert ja, aber

ich möchte nur einen Ordner rein-mounten und nicht 3 oder 5 oder 7. Weil 
es könnten noch mehr Stellen in Unter-Verzeichnissen geben an denen die 
Applikation im Container persistente Daten benötigt/erzeugt.


Ausserdem soll der Container in Kubernetes laufen und dann muss ich ja 
für jedes Volume noch einen Volume Claim und ein Volume erstellen. 
Schlanker wäre hier toll.
Diese Volumes dürfen sich "glaube ich" auch nicht überlagern im 
Speicher.


Und die Nutzerdaten (jeder Container bedient einen Nutzer) sind dann 
auch verstreut auf die 3-7 Volumes. Auch nicht toll.

So sollte es sein:


Verzeichnisstruktur im persistenten Volume (aktuell in minikube)

/PODNAME1/userdata/log
/PODNAME1/userdata/bilder
/PODNAME1/userdata/cfg

/PODNAME2/userdata/log
/PODNAME2/userdata/bilder
/PODNAME2/userdata/cfg


Verzeichnisstruktur im Container = POD
/userdata/log
/www/user/bilder
/app/cfg


Im Dockerfile nur ein Volume "/userdata" definieren,
einbinden vom persistenten Volume /PODNAMEX/userdata

dann war gedacht:
mount --bind /userdata/bilder /www/user/bilder
mount --bind /userdata/cfg /app/cfg

Mounts im Dockerfile oder beim Starten des Containers - Permission fehlt 
- das ist dass Problem.

MfG

von Εrnst B. (ernst)


Lesenswert?

Maik schrieb:
> Mounts im Dockerfile oder

Macht keinen Sinn. Das Dockerfile ist die "Bauanleitung" für den 
Container, aus dem build wird am Ende nur das Dateisystem 
weiterverwendet, keine aktiven Mounts o.Ä.


>  beim Starten des Containers - Permission fehlt
> - das ist dass Problem.

Kannst du per "cap_add CAP_SYS_ADMIN" oder gleich "privileged container" 
umgehen.
Halte ich für eine extrem unschöne Frickellösung.

Einfache symlinks gehen nicht? Die könntest du auch schon im Dockerfile 
vor-anlegen.

Oder versuch die Applikations-Configs in deinem Container anzupassen, 
dass die mit deinen Pfaden arbeiten.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.