Docker mit Nextcloud: Ext. Festplatte einbinden

Hallo allerseits,

ich habe auf einer Maschine (ubuntu Server) Docker und per portainer nextcloud installiert.
Nun hat die Maschine an sich keinen großen Speicher und ich möchte eine ext. Festplatte mit einbinden.
Ich hab mich jetzt mehrer Tage mit dem Thema beschäftigt und vieles ausprobiert, finde aber keine Lösung.
Gibt es eine Anleitung wie ich in nextcloud die externe Festplatte einbinden kann?
Ich hab die Festplatte nach bestem Wissen und Gewissen auf dem HOST OS gemountet. Weiter komme ich nicht.

Kann mir jemand weiter helfen? Bin wirklich nicht der Linux-Profi.
Danke :slight_smile:

eigentlich hättest du:

  • ein docker volume für /var/www/html/data anlegen sollen.
    im container ist das der ort, wo nextcloud deine daten ablegt. wenn’s das standard image und nicht irgendwas mit nextcloudpi oder linuxserver.io ist. muss man immer schauen.
  • dieses docker volume legt man auf dem host (dein ubuntu server) auf ein logical volume oder direkt auf die externe platte. vorher.

dann siehst du in nextcloud immer die große externe hd. mit einem logical volume manager kannst du dann auch noch beliebige andere platten dazufügen. (linux feature, hat nix mit nextcloud zutun.)

hast du ein extra volume angelegt? oder sieht deine volume “Mount Point” liste im portainer so aus:

grafik

wenn du “alles nochmal neu machen” kannst, musst du beim nächsten mal dafür sorgen, dass in der liste /mount/pfad/externe/hdd auftaucht. an der richtiggen stelle. kann man dir beschreiben.

Da ich mit nextcloud nichts weiter angestellt habe, konnte ich den Container einfach so löschen. Ich stehe also wieder am Anfang.

Das erste habe ich so richtig verstanden? -> Ich lege in Docker einen neues volume an mit dem mountpoint: /var/www/html/data an und in dieses Verzeichnis mounte ich die externe Festplatte? Wenn ich dann später den nextcloud-Container anlege gebe ich als volume /var/www/html/data an?

Und ein lvm funktioniert so, dass ich ein logical volume auf /var/www/html/data anlege und diesem Verzeichnis kann ich später logisch bspw. andere ext. Festplatten zu ordnen?

Nach welcher Anleitung bist Du vorgegangen?

Was meinst Du damit konkret? Hier interessiert mich besonders linuxserv.io.

die/wir können sich/uns nicht einigen, wo nun die daten hin sollen:

nextcloud gmbh
grafik
linuxserver .io

und das ist der pfad im container. der könnte immer gleich sein.

grundsätzlich ist das vollkommen pumpe. nur muss man hier im forum jedesmal umdenken und aufpassen.

ne. andersrum denken.

lvm’s sind quasi die virtualisierung von festplatten. du hast festplatten und deren partitionen, die ein lvm zu einer logischen partition zusammenfasst, die du an einem mountpoint auf deinem host mountest. also /dev/sdb1 -> /mnt/nextcloud-data. -> steht symbolisch für den lvm. wenn der platz nicht mehr ausreicht, fügst du noch eine zweite partition hinzu. also (/dev/sdb1 + /dev/sdc1) -> /mnt/nextcloud-data. das geht dann on-the-fly. vorher aber bitte noch ein bisschen zu lvm und raid lesen. das sind linux themen. haben nix mit nextcloud und docker zu tun.

im prinzip wie folgt:

also du liest die beschreibung von dem images, welches du benutzt, auf hub.docker.com. dort findest du obige zeilen. und so was wie:

$ docker run -d \
    -v nextcloud:/var/www/html \
    -v apps:/var/www/html/custom_apps \
    -v config:/var/www/html/config \
    -v data:/var/www/html/data \
    -v theme:/var/www/html/themes/<YOUR_CUSTOM_THEME> \
    nextcloud

das -v steht für --volume und liest sich wie folgt: links vom : steht das volume name bzw. der verzeichnispfad auf dem host, rechts der pfad, wo im container die daten erscheinen sollen. links muss man noch wissen, wenn der pfad absolut ist, also /mnt/nextcloud-data, dann wird genau dieser pfad auf dem host genutzt. wenn dort nur data ohne führendes / steht, wird von docker ein named volume angelegt. das ist aber auch “nur” ein pfad unter /var/lib/docker/volumes/... (siehe oben, screenshots mountpoint). (*)

ein container prozess “sieht” jetzt alle dateien, die in dem image sind - die werden auch irgendwo unter /var/lib/docker ausgepackt - plus alle volumes die du mit -v angibst.

also:

  • du mountest deine externe festplatte mit ubuntu mitteln an einen mountpoint. /mnt/nextcloud-data
    mit oder ohne lvm.
  • du legst mit portainer einen neuen container an, der /mnt/nextcloud-data als volume nach /var/www/html/data im container bindet.

wenn du jetzt eine fehlermeldung bekommst, musst du die ownership von /mnt/nextcloud-data noch richtig setzen. du musst die uid des webserver users des docker image ermitteln (docker exec -u www-data nextcloud id) und sudo chown <uid> /mnt/nextcloud-data ausführen. (nicht einfach sudo chown www-data:www-data ... siehe unten. In portainer kannst du die “container console” benutzen, um die id des users zu ermitteln.

ein wort der warnung: du siehst zwar jetzt in /mnt/nextcloud-data deine daten bzw. die nextcloud datenstruktur. aber dieser ordner “gehört” jetzt docker und dem nextcloud im container. wenn du mit ls -l /mnt/nextcloud-data schaust, siehst du (fast) genau das selbe, wie mit docker exec nextcloud ls -l /var/www/html/data den inhalt anschaust. höchstwahrscheinlich wirst du feststellen, dass die dateien im container dem user www-data gehören, auf dem host steht dort aber nur eine “nummer”. jetzt bloß nicht der versuchung verfallen und da mal aufräumen. was da genau passiert, muss du verstanden haben, wenn du an nextcloud vorbei auf die daten in /mnt/nextcloud-data direkt zugreifen willst.

(*) docker legt auch selber volumes an. wenn der image erzeuger, dass so vorgesehen hat. die verschwinden aber mit dem container. bzw. man muss, wenn man mit container spielt und immer wieder welche löscht, ab und an mal schauen, ob nicht verwaiste volumes rumliegen. und ein volume ist keine “besondere datei”, wie bei virtualisierern wie vmware und/oder virtualbox. es ist “nur” der pfad zu dem verzeichnis.

p.s.: man könnte auch einfach (**) die externe festplatte komplett nach /var/lib/docker mounten. dann liegt die gesamte “docker welt” auf der externen festplatte. du legst mit “-v data:/var/www/html/data” ein named volume an und docker kümmert sich um alles.

dann liegt aber auch deine datenbank auf diese externen festplatte. wenn das jetzt ein externes nvme laufwerk ist, fein. wenn das eine “lahme” NAS HDD ist, immer noch fine, aber halt langsamer.

und wenn die hdd mal nur noch komische geräusche macht, ist ebenfalls die gesamte docker welt futsch.

zum thema backup findest du hier im forum einige anleitungen. :wink:

(**) du musst natürlich docker stoppen, die bestehenden dateien unter /var/lib/docker sichern, mounten und die dateien wieder zurückspielen. (oder /var/lib/docker in /var/lib/docker.old umbennen.)

1 Like