Volume vergessen bei Docker Erstellung

Don-DCH

Commander
Registriert
Aug. 2009
Beiträge
3.068
Guten Nachmittag zusammen,

ich habe mir vom Docker hub den Rucker RUN Befehl für Papermerge https://hub.docker.com/r/papermerge/papermerge
umwandeln lassen von Chat GPT in Docker Compose und diesen in Portainer auf meinem Synology NAS ausgeführt, anbei der Befehl.

version: '3'

services:
papermerge:
image: papermerge/papermerge:latest
ports:
- "7451:8000"
environment:
- PAPERMERGE__MAIN__SECRET_KEY=abc
- DJANGO_SUPERUSER_PASSWORD=password
- DJANGO_SUPERUSER_USERNAME=meinuser


Der Container wurde ohne Fehler erstellt, nach der Anmeldung wollte ich Dokumente hochladen und wunderte mich, dass es nicht funktioniert. Da habe ich doch glatt das Volume vergessen.

Nun Frage ich mich:

1. Wo wurde der Container reingespeichert, kann man das nachschauen, ich habe nichts gefunden dazu.
2. Wieso läuft die Erstellugn ohne Fehler durch, es muss doch eigentlich immer ein Speicherort angegeben werden oder?
3. Muss ich aufräumarbeiten erledigen, nachdem ich das Volume vergessen habe, kann irgendwo was reingespeichert werden?

Viele Grüße und einen schönen Tag zusammen :)
 
Auf der Syno hast du doch sicherlich eine Docker App. In der kannst den Container Anhalten und deine Volumes nachtäglich einbinden.

Du musst kein Volume hinzufügen, dann nutz der Container den "internen" Speicher, heist aber auch, das du selbst nur kompliziert an die Daten ran kommst und wenn mal was mit dem Container ist, die Daten u.U. weg sind...

-----------------------
EDIT:
Warum lässt du sowas von ChatGPT machen?
  • Docker-App öffnen
  • Quelle hinzufügen
  • Container erstellen
  • fertig
 
Du hast ja schon docker hub verlinkt. Da steht doch unten ein Beispiel für eine docker compose file sogar mit datenbank.
Die Daten werden dann lokal im Container gespeichert und sind dann gelöscht wenn man den Container mal entfernt.
 
  • Gefällt mir
Reaktionen: mae1cum77
Wenn mit Portainer gebaut, damit löschen.

Wie schon über mir angemerkt, nutzt das eine postgres-Datenbank zum speichern, keine eigenen Volumes.

Da ist doch ein Beispiel in dem link ;).
 
Wo son Syno jetzt die Volumes speichert weiß ich jetzt nicht, aber im Normalfall ist der Store unter /var/lib/docker.

/var/lib/docker/volumes/1c59d5b7e90e9173ca30a7fcb6b9183c3f5a37bd2505ca78ad77cf4062bd0465/_data
so sieht das dann z.B. aus.

Um jetzt herauszufinden zu welchem Container welches Volume gehört kannst du zu erst mit
sudo docker ps dir deine container anzeigen lassen und dann mit der entsprechenden container id und sudo docker inspect --format="{{.Mounts}}" $containerID dann die Volume Paths anzeigen lassen.
 
  • Gefällt mir
Reaktionen: _anonymous0815_
Don-DCH schrieb:
2. Wieso läuft die Erstellugn ohne Fehler durch, es muss doch eigentlich immer ein Speicherort angegeben werden oder?
Nein, weil die Daten jetzt im Container gespeichert wurden. Sobald der Container jetzt geloescht wird (was zum beispiel bei einem docker compose down passiert), sind halt alle daten, die nur im container und nicht in einem Volume waren weg.
 
Vielen herzlichen Dank euch für eure zahlreichen Antworten :)

K-551 schrieb:
Auf der Syno hast du doch sicherlich eine Docker App. In der kannst den Container Anhalten und deine Volumes nachtäglich einbinden.
Genau, verwende aber eigentlich immer Portainer mit Stacks und Docker Compose, weil ich das vom Handling einfacher finde :)

K-551 schrieb:
Du musst kein Volume hinzufügen, dann nutz der Container den "internen" Speicher, heist aber auch, das du selbst nur kompliziert an die Daten ran kommst und wenn mal was mit dem Container ist, die Daten u.U. weg sind...
Hmm, vielleicht ist das eine doofe Frage, aber wo genau ist dieser Speicherort?
Unter Volume1/Docker habe ich ja garkein Ordner angelegt. Das wird dann verborgen gespeichert?
Das heißt, wenn ich den Docker COntainer lösche sind auch alle Daten weg, weil ich kein Speicherort als Volume angegeben habe, richtig? Das wäre ja gut, dann könnte ich das nochmal erstellen.

K-551 schrieb:
Warum lässt du sowas von ChatGPT machen?
Weil auf der Docker Hub Seite der Docker RUN Befehl steht und Chat GPT den leicht in Docker COmpose umwandeln kann, damit ich das in Portainer unter Stacks verwenden kann :) die Synology Container Station würde doch auch das YAML Compose File benötigen oder?


Yibby schrieb:
Du hast ja schon docker hub verlinkt. Da steht doch unten ein Beispiel für eine docker compose file sogar mit datenbank.
Die Daten werden dann lokal im Container gespeichert und sind dann gelöscht wenn man den Container mal entfernt.
Diesen Befehl habe ich genommen und angepasst:
docker run -p 8000:8000 \
-e PAPERMERGE__MAIN__SECRET_KEY=abc \
-e DJANGO_SUPERUSER_PASSWORD=123 \
-e DJANGO_SUPERUSER_USERNAME=john \
papermerge/papermerge:latest

Weiter Unten steht dann:
"By default Papermerge DMS uses sqlite3 database. In order to use PostgreSQL use following docker compose file:"

Das heißt für mich, dass man nicht zwingend die Postgre SQL Datenbank verwenden muss oder? Ich wollte es standardmäßig konfiguriert haben, aber mit Volume wo die Daten gesichert werden.
Das heißt wenn ich den COntainer lösche ist alles restlos enternt gell?
Oder ist da noch irgendwas was tief im System gespeichert wird und der Ordner bei Synology standardmäßig ausgeblendet ist?


mae1cum77 schrieb:
Wenn mit Portainer gebaut, damit löschen.
Ok, werde ich machen, mache ich eigentlich immer mit Portainer :)

mae1cum77 schrieb:
Wie schon über mir angemerkt, nutzt das eine postgres-Datenbank zum speichern, keine eigenen Volumes.
Ja, hatte gedacht, dass ich das auf Standard belasse und die sqlite3 Datenbank verwende aber nur das Volume vergessen habe, das heißt man kann garkein Volume erstellen?
Dann wäre bei einem Update ja immer alles weg oder?
Dann muss man ja zwangsweise die Posgress DB verwenden mit Volumen oder?

DBJ schrieb:
Wo son Syno jetzt die Volumes speichert weiß ich jetzt nicht, aber im Normalfall ist der Store unter /var/lib/docker.

/var/lib/docker/volumes/1c59d5b7e90e9173ca30a7fcb6b9183c3f5a37bd2505ca78ad77cf4062bd0465/_data
so sieht das dann z.B. aus.

Um jetzt herauszufinden zu welchem Container welches Volume gehört kannst du zu erst mit
sudo docker ps dir deine container anzeigen lassen und dann mit der entsprechenden container id und sudo docker inspect --format="{{.Mounts}}" $containerID dann die Volume Paths anzeigen lassen.
Vielen herzlichen Dank dir, das heißt da müsste ich mit SSH dan schauen oder gibt es auch einen File Explorer den man Installieren kann, in der File Station bekomme ich das nicht irgendwie angezeigt oder? Wenn ich den COntainer lösche sollte aber alles restlos weg sein oder könnten dann überreste sag ich mal übrigbleiben.
Kenne mich nicht so aus, habe nur im Hinterkopf, das zumindest früher bei Windows Programmdeinstallationen oft nie alle Ordner oder Registry Keys entfernt wurden, möchte das ganze ja so sauber wie möglich halten :)


NJay schrieb:
Nein, weil die Daten jetzt im Container gespeichert wurden. Sobald der Container jetzt geloescht wird (was zum beispiel bei einem docker compose down passiert), sind halt alle daten, die nur im container und nicht in einem Volume waren weg.
Ok, das klingt gut, dann lösche ich den Kompletten Stack, welcher ja auch alle Container löscht dann sollte alles weg sein.

Dann werde ich nochmal einen Versuch mit Postgress Starten, da wird ja dann alles in der Datenbank abgelegt, welche ja auch eine Volume angabe hat :)
 
  • Gefällt mir
Reaktionen: mae1cum77
Don-DCH schrieb:
Dann werde ich nochmal einen Versuch mit Postgress Starten, da wird ja dann alles in der Datenbank abgelegt, welche ja auch eine Volume angabe hat
Genau :).
 
  • Gefällt mir
Reaktionen: Don-DCH
Hmm, hat leider nicht geklappt, habe jetzt den Compose befehl genommen

version: '3.7'
services:
app:
image: papermerge/papermerge
environment:
- PAPERMERGE__MAIN__SECRET_KEY=abc
- DJANGO_SUPERUSER_PASSWORD=12345
- PAPERMERGE__DATABASE__TYPE=postgres
- PAPERMERGE__DATABASE__USER=postgres
- PAPERMERGE__DATABASE__PASSWORD=123
- PAPERMERGE__DATABASE__NAME=postgres
- PAPERMERGE__DATABASE__HOST=db
ports:
- 8000:8000
depends_on:
- db
db:
image: bitnami/postgresql:14.4.0
volumes:
- postgres_data:/var/lib/postgresql/data/
environment:
- POSTGRES_PASSWORD=123
volumes:
postgres_data:version: '3.7'

Es kommt allerdings eine Fehlermeldung:
1690298869306.png


Die Angabe von:
"volumes:
postgres_data:version: '3.7'"
sollte der Fehler sein, so vermtue ich. Nun ist die Frage, ob man das weglassen kann?

Auf der ofiziellen Seite (https://docs.papermerge.io/Setup/docker.html) steht es so
volumes:
postgres_data:

Da ist jetzt garkeine Version angegeben.


Ebenfalls Frage ich mich ob ich bei dem Datenbank Image nicht lieber :latest nehmen sollte?
Die Version 14 ist ja schon älter.

Viele Grüße
 
Einfach version weglassen. Die Frage ist, ob papermerge mit anderen Versionen als 14 kompatibel ist oder ob es zwingend diese Version benötigt.
 
  • Gefällt mir
Reaktionen: Don-DCH
Leider hat das nicht geklappt :(
Habe jetzt auch nachgeschaut, was bei dem Entwickler der Datenbank angegeben ist, dort steht ein ganz anderer Pfad für die Datenbank


/bitnami/postgresql
statt
/var/lib/postgresql/data/
aber auch damit klappt es nicht....

Unter Volumes in Portainer bei dem DatenbankContainer stehen noch zwei weitere Volumes, diese habe ich aber nicht erstellt:

/docker-entrypoint-preinitdb.d
/docker-entrypoint-initdb.d

Und Vorne eine lange Zahlen/Zeichenkombination, ich vermute das wird auch im Container gespeichert.

In den LOGS steht folgendes:

postgresql 15:59:28.27 INFO ==> ** Starting PostgreSQL setup **
postgresql 15:59:28.32 INFO ==> Validating settings in POSTGRESQL_* env vars..
postgresql 15:59:28.32 INFO ==> Loading custom pre-init scripts...
postgresql 15:59:28.36 INFO ==> Initializing PostgreSQL database...
mkdir: cannot create directory ‘/bitnami/postgresql/data’: Permission denied

Das heißt unter dem angegeben Pfad möchte er noch den Ordner Data erstellen?
 
Die letzte Zeile in der yaml sieht aus wie ein Copy/Paste Fehler des Entwicklers. So sollte es zumindest starten:

Code:
version: '3.7'
services:
  app:
    image: papermerge/papermerge
    environment:
      - PAPERMERGE__MAIN__SECRET_KEY=abc
      - DJANGO_SUPERUSER_PASSWORD=12345
      - PAPERMERGE__DATABASE__TYPE=postgres
      - PAPERMERGE__DATABASE__USER=postgres
      - PAPERMERGE__DATABASE__PASSWORD=123
      - PAPERMERGE__DATABASE__NAME=postgres
      - PAPERMERGE__DATABASE__HOST=db
    ports:
      - 8000:8000
    depends_on:
      - db
  db:
    image: bitnami/postgresql:14.4.0
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    environment:
      - POSTGRES_PASSWORD=123
volumes:
    postgres_data:

Damit werden dann zumindest die Daten der Postgres-Datenbank in einem Volume persistiert.

Aber bist du dir sicher, dass du lediglich den REST Backend Service von Papermerge hochziehen möchtest?

In der Doku zu Papermerge ist jedenfalls ein anderes Compose-File angegeben, das auch deutlich sinnhafter aussieht: https://docs.papermerge.io/Setup/docker-compose.html#complete-stack-in-2-minutes

Dort wird ein lokaler Ordner namens "media_root" in den Container gemounted, was ja ziemlich dem entspricht, was du vorhast.
 
Vielen Dank dir, das werde ich gleich mal probieren, bei vielen Docker COntainern habe ich die Anleitungen von Mariushosting verwendet, hier gibt es auch eine Anleitung, leider nur für die alte Version 2.0, welche nicht mehr weiterentwickelt wird.

In den Anleitungen werden immer die
- PUID=
- PGID=

angegeben.
Kann es sein, das man das immer machen muss für eine Zuordnung das schreibrechte bestehen?
Don-DCH schrieb:
In den LOGS steht folgendes:

postgresql 15:59:28.27 INFO ==> ** Starting PostgreSQL setup **
postgresql 15:59:28.32 INFO ==> Validating settings in POSTGRESQL_* env vars..
postgresql 15:59:28.32 INFO ==> Loading custom pre-init scripts...
postgresql 15:59:28.36 INFO ==> Initializing PostgreSQL database...
mkdir: cannot create directory ‘/bitnami/postgresql/data’: Permission denied

Das heißt unter dem angegeben Pfad möchte er noch den Ordner Data erstellen?
Den Fehler konnte ich beheben in dem ich testweise auf den Unterordner der Gruppe Jeder Schreibrechte gegeben habe.

Also muss ich die IDs immer mit angeben oder, das geprüft wird ob der Benutzer der dahinter steckt schreibrechte auf den Ordner hat, stimmt das, kann man das so pauschal sagen, bei Volume angabe immer die Parameter
- PUID=
- PGID=
setzen?

VIele Grüße und ein schönen Abend

EDIT: sorry ganz vergessen auf deine Frage einzugehen (Aber bist du dir sicher, dass du lediglich den REST Backend Service von Papermerge hochziehen möchtest?)

Ehrlich gesagt dachte ich, das es sich um die normale Installation handelt, einen REST Server Brauche ich nicht.

Hmm, was mich auch verwundert , das zwei Datenbanken genutzt werden, REDIS und POSTGRESQL
Und ein Port für die Weboberfläche ist auch nicht angegeben oder sehe ich das falsch?

ports:
- '6379:6379'
und
ports:
- 9200:9200
- 9300:9300

sind ja nicht von der Anwendung selbst
 
Zuletzt bearbeitet:
Versteh immer noch nicht was du machst.
Probier es doch wenigstens mal über den offiziellen Weg und halte dich nicht an irgendwelchen Anleitungen.
Vor allem wenn du die Anleitung von Mariushosting nutzt. Kann nicht von der explizit sprechen, hab aber mit deren Anleitungen schlechte erfahrungen. Komplizierte Wege, welche alles verkomplizieren. wenn doch auch anders geht.

Hab jetzt mal selbst in Docker aufgesetzt. ohne weitere Konfiguration 2.30min (mit download). Mit konfigurieren und verstehen denke bist du in max ner halben stunde durch...

  • Docker-App installieren
  • Docker-App öffnen
  • unter Registriereung nach papermerge suchen und papermerge/papermerge oder linuxserver/papermerge wählen, doppelklick drauf und latest wählen -> das "Image"/der Container wird heruntergeladen -> wenn das fertig ist
  • Unter Image den Container anklicken und oben auf starten drücken. Config durchgucken und ggf. gewünschte Punkte ändern
  • fertig
Und wenns nicht so läuft wie du willst, löscht du den container und fängst von vorn an...

-------------------------------------
Edit: Hier noch ne Anleitung dazu.
 
Zuletzt bearbeitet:
Zurück
Oben