Portainer stack lässt sich nicht löschen

Bennyaa

Lieutenant
Registriert
März 2007
Beiträge
832
Hallo, ich habe eben einen stack gestoppt und daraufhin auf löschen geklickt.
es erschien diese Fehlermeldung und ich kann den Stack nicht mehr löschen.

Was kann ich tun?

1697208012205.png

Ergänzung ()

unter anderem stand das im docker compose file:

"
environment:
PAPERLESS_REDIS: redis://broker:6379
PAPERLESS_SECRET_KEY: mykey!
PAPERLESS_ADMIN_USER: myuser
PAPERLESS_ADMIN_PASSWORD: mypassword
PAPERLESS_OCR_LANGUAGE: deu+eng
PAPERLESS_CONSUMER_DELETE_DUPLICATES: true
USERMAP_UID: 0
USERMAP_GID: 0
"

die letzten beiden zeilen habe ich raus genommen.
Wollte sie erst auf die entsprechenden user uds stellen, aber es ging auch ohne.
daran kann es aber nicht liegen, dass er manchmal langsam dateien lädt, oder?
 
Zuletzt bearbeitet:
Klingt so, also ob der Stack schon von der SSD gelöscht ist, aber noch in der Portainer-Datenbank lebt ;)

Würde versuchen ne Dummy "docker-compose.yml" in dem angegebenen Ordner zu platzieren, und schauen ob das Löschen dann durchgeht ...
 
@x.treme hat funktioniert. Danke.
Sag mal... Um die Container zu stoppen, stoppt man da den Stack, oder stopp man den eigentlich nie, da die Container sonst weg sind?
 
Kannst den Stack jederzeit mit Stop stoppen, die persistenten Daten bleiben dabei erhalten.
Die Image wird durch Stop nicht automatisch gelöscht, d.h. nach Start sind die Container auch direkt wieder verfügbar.
 
Ist ein zweiteiliges System aus Container-Image (austauschbar) und über die Compose-Datei eingebundenen Volumes. Letztere sorgen für Persistenz und können mit der YAML zusammen umgezogen/gesichert werden. Wenn kein Volume eingebunden wird, sind die Daten weg.

So nett Portainer für einige Tasks ist, empfiehlt sich hier doch die Nutzung von Docker-Compose (CLI) zum Erstellen der Stacks. Mit ein wenig Einarbeitung erleichtert es das Grundverständnis von Docker-Containern/Volumes und vereinfacht die Wartung/Updates enorm.
 
@x.treme ja die Persistenten Daten sind noch da.
Wenn ich den Stack stoppe, dann sind die Container weg.
Starte ich den Stack wieder, sind wieder alle da mit den persistenten Daten.
 
mae1cum77 schrieb:
So nett Portainer für einige Tasks ist, empfiehlt sich hier doch die Nutzung von Docker-Compose

Portainer macht doch eigentlich nichts anderes? Über den Web-Editor schreibst du deine Docker-Compose/YAML-Files, wobei dir Fehler direkt angezeigt werden. Bei Bedarf kannst du aber auch ein Git-Repository anschließen. Ein Klick auf Pull & Redeploy und der Container aktualisiert, alternativ Webhooks via Portainer nutzen (oder Watchtower).

Für mich erleichtert es die Wartung enorm, da ich mehrere VM mit Docker habe, aber bei Portainer über ein GUI alle Environments gleichzeitig verwalten kann, und habe alles visuell schnell erfassbar auf einem Blick.

Aber ansonsten stimme ich dir zu: Erst die Basics mit Docker-Compose erlenen und Verständnis aufbauen, danach Portainer und co. je nach persönlicher Präferenz.
Ergänzung ()

Bennyaa schrieb:
Starte ich den Stack wieder, sind wieder alle da mit den persistenten Daten.
So wie es sein soll ;)

Nur aufpassen, wenn du z.B. manuell einen Docker-Container z.B. ein weiteres Netzwerk über die GUI hinzugefügt hatte, ist es nach Stop/Start auch weg. Ist halt die Config so wie in der Compose-File/Editor definiert.
 
  • Gefällt mir
Reaktionen: mae1cum77
Bennyaa schrieb:
Starte ich den Stack wieder, sind wieder alle da mit den persistenten Daten.
Das ist genau der Trick :). So können die Images aktualisiert werden ohne die Daten anzutasten. Über die CLI ist das ein pull zum aktualisieren und ein up -d zum Neuerstellen der aktualisierten Images.

x.treme schrieb:
Für mich erleichtert es die Wartung enorm, da ich mehrere VM mit Docker habe, aber bei Portainer über ein GUI alle Environments gleichzeitig verwalten kann, und habe alles visuell schnell erfassbar auf einem Blick.
Hab ich nicht bestritten :). Nur die Updates mache ich generell über die Compose-CLI, nach dem obligatorischen Snapshot der VM.
 
  • Gefällt mir
Reaktionen: x.treme
x.treme schrieb:
Portainer macht doch eigentlich nichts anderes? Über den Web-Editor schreibst du deine Docker-Compose/YAML-Files, wobei dir Fehler direkt angezeigt werden. Bei Bedarf kannst du aber auch ein Git-Repository anschließen. Ein Klick auf Pull & Redeploy und der Container aktualisiert, alternativ Webhooks via Portainer nutzen (oder Watchtower).

Für mich erleichtert es die Wartung enorm, da ich mehrere VM mit Docker habe, aber bei Portainer über ein GUI alle Environments gleichzeitig verwalten kann, und habe alles visuell schnell erfassbar auf einem Blick.

Aber ansonsten stimme ich dir zu: Erst die Basics mit Docker-Compose erlenen und Verständnis aufbauen, danach Portainer und co. je nach persönlicher Präferenz.
Ergänzung ()


So wie es sein soll ;)

Nur aufpassen, wenn du z.B. manuell einen Docker-Container z.B. ein weiteres Netzwerk über die GUI hinzugefügt hatte, ist es nach Stop/Start auch weg. Ist halt die Config so wie in der Compose-File/Editor definiert.
Im Composite file steht jetzt in meinem
Fall kein explizites Netzwerk drin.
Er hat wohl ein paperless default Network als Bridge erstellt. Ist das normal, oder bei dem Image speziell und normal sollte man das Netzwerk definieren?
 
Bennyaa schrieb:
Ist das normal, oder bei dem Image speziell und normal sollte man das Netzwerk definieren?
Ist normal, jeder Stack wird in einem eigenen Subnet generiert.

Gerade wenn man einen Proxy-Server nutzt, e.g. Nginx Proxy Manager (NPM), macht es jedoch Sinn die Netzwerke selber zu definieren, da ja NPM dann auch dem Netzwerk des Stacks hinzugefügt werden muss.
Auch erlaubt es dir z.B. via "internal:true" zu definieren, dass gewisse Subnets keinen eigenen Internet-Zugang haben, etc. - also mehr Kontrolle über dein Netzwerk.
 
@x.treme OK. Danke für den Hinweis, also ein Container, den ich bewusst auf dem Netzwerk "host" betreiben möchte (weil immer wieder Ports hinzukommen, die freigeschaltet werden müssten), kann ich somit gar nicht so einfach mit compose erstellen, sondern am Besten manuell wie gewohnt?

Ps.das sind die letzten Zeiler meiner Compose Datei:
USERMAP_UID: 1026
USERMAP_GID: 100

volumes:
data:
media:
redisdata:
Die ersten beiden Zeilen geben ja quasie die Zugriffsrechte an und sollten angepasst immer da sein? (Sind Evironmentvariablen)?

Die letzten 4 Zeilen sind ungenutzt.
Die Volumes sind schon bei den Services angelegt / zugewiesen, wieso stehen sie dort nochmals leer?
Reicht Dir das als Info, oder bräuchtest Du die ganze Compose Datei, des Stacks?
 
@Bennyaa

Mit Netzwerk "selbst definieren" meinte ich innerhalb der Docker-Compose-File.

Bei mir steht da z.B. am Ende der Compose-File:
Code:
networks:
 paperless-proxy:
  name: paperless-proxy
  internal: true
  driver: bridge
  ipam:
   config:
    - subnet: 172.62.0.0/24

Wenn ein Netzwerk bereits außerhalb des Stacks erstellt wurde, gibst du an
Code:
networks:
  paperless-proxy:
   external: true


(Für ein Host-Mode kannst du beim Container selber "network_mode: host" angeben, dann schlägt jeder Port-Zugriff auf den Host beim Container ein - falls du das meinst ;) )

Bzgl. Volume: Das ist keine Dopplung - unten wird das Volume (oder auch Netzwerk) grundsätzlich definiert (hier eben mit den Default-Einstellungen), oben werden sie den jeweiligen Containern zugeordnet.
Ich selber nutzte aber eigentlich nie Volumes, sondern meistens Bind Mounts.

Bzgl. USERMAP_UID: Soweit ich es in Erinnerung habe, ist das eine Umgebungsvariable die von Paperless definiert ist? Wenn du einen Bind-Mount mit einem geteilten Ordner erstellst (auf den z.B. auch noch Syncthing oder Nextcloud zugreift), kannst du damit z.B. sicherstellen, dass sowohl Paperless als auch Nextcloud die Daten im selben Ordner (e.g. den Consume-Ordner) schreiben und löschen können. Ansonsten würde es hier Konflikte bzgl. den Dateizugriffsrechten geben.
 
Zuletzt bearbeitet:
@x.treme
mein kompletter steck sieht so aus:

# docker-compose file for running paperless from the Docker Hub.
# This file contains everything paperless needs to run.
# Paperless supports amd64, arm and arm64 hardware.
#
# All compose files of paperless configure paperless in the following way:
#
# - Paperless is (re)started on system boot, if it was running before shutdown.
# - Docker volumes for storing data are managed by Docker.
# - Folders for importing and exporting files are created in the same directory
# as this file and mounted to the correct folders inside the container.
# - Paperless listens on port 8000.
#
# SQLite is used as the database. The SQLite file is stored in the data volume.
#
# To install and update paperless with this file, do the following:
#
# - Copy this file as 'docker-compose.yml' and the files 'docker-compose.env'
# and '.env' into a folder.
# - Run 'docker-compose pull'.
# - Run 'docker-compose run --rm webserver createsuperuser' to create a user.
# - Run 'docker-compose up -d'.
#
# For more extensive installation and update instructions, refer to the
# documentation.

version: "3.4"
services:
broker:
image: docker.io/library/redis:7
restart: unless-stopped
volumes:
- /volume1/docker/paperless-ngx/redisdata:/data

webserver:
image: ghcr.io/paperless-ngx/paperless-ngx:latest
restart: unless-stopped
depends_on:
- broker
ports:
- "8888:8000"
healthcheck:
test: ["CMD", "curl", "-fs", "-S", "--max-time", "2", "http://localhost:8000"]
interval: 30s
timeout: 10s
retries: 5
volumes:
- /volume1/docker/paperless-ngx/data:/usr/src/paperless/data
- /volume1/docker/paperless-ngx/media:/usr/src/paperless/media
- /volume1/docker/paperless-ngx/export:/usr/src/paperless/export
- /volume1/docker/paperless-ngx/consume:/usr/src/paperless/consume
environment:
PAPERLESS_REDIS: redis://broker:6379
PAPERLESS_SECRET_KEY: mykey!
PAPERLESS_ADMIN_USER: myusername
PAPERLESS_ADMIN_PASSWORD: mypassword
PAPERLESS_OCR_LANGUAGE: deu+eng
PAPERLESS_CONSUMER_DELETE_DUPLICATES: true
USERMAP_UID: 1026
USERMAP_GID: 100

volumes:
data:
media:
redisdata:

in den containern wird das netzwerk angezeigt.... hat sich doch dann selbst erzeugt, oder? Ich finde esnirgends im compose:
1697274082551.png
 
Ja wie oben schon geschrieben, normales Verhalten. Wenn du kein Netzwerk selber definierst, wird für den Stack automatisiert ein eigenes Subnetz generiert.

Du kannst das Netzwerk selber in der Docker Compose wie oben beschrieben definieren für mehr Kontrolle. Musst es aber nicht.
Ergänzung ()

Mal als Beispiel, so sieht meine Docker-Compose für Paperless aus ;)

JSON:
version: "3.4"
services:
  broker:
    image: docker.io/library/redis:7
    restart: unless-stopped
    volumes:
      - /docker/paperless/redis:/data
    networks:
     paperless-backbone:
  db:
    image: docker.io/library/postgres:13
    restart: unless-stopped
    volumes:
      - /data/.docker-volumes/paperless/postgres:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: paperless
      POSTGRES_USER: paperless
      POSTGRES_PASSWORD: $DB_PASS
    networks:
     paperless-backbone:

  webserver:
    image: ghcr.io/paperless-ngx/paperless-ngx:latest
    restart: unless-stopped
    depends_on:
      - db
      - broker
    healthcheck:
      test: ["CMD", "curl", "-fs", "-S", "--max-time", "2", "http://localhost:8000"]
      interval: 30s
      timeout: 10s
      retries: 5
    volumes:
      - /docker/paperless/data:/usr/src/paperless/data
      - /usb/data/nextcloud/user/files/99_Utility/Paperless-Archiv:/usr/src/paperless/media
      - /usb/data/nextcloud/user/files/01_Dokumente:/usr/src/paperless/media/documents/archive
      - /usb/data/nextcloud/user/files/99_Utility/Paperless-Export:/usr/src/paperless/export
      - /usb/data/nextcloud/user/files/99_Utility/Paperless-Import:/usr/src/paperless/consume
    environment:
      PAPERLESS_REDIS: redis://broker:6379
      PAPERLESS_DBHOST: db
      PAPERLESS_DBPASS: $DB_PASS
      USERMAP_UID: 33
      USERMAP_GID: 33
      PAPERLESS_SECRET_KEY: $secret
      PAPERLESS_TIME_ZONE: Europe/Berlin
      PAPERLESS_OCR_LANGUAGE: deu
      PAPERLESS_URL: https://docs.home.arpa
      PAPERLESS_FILENAME_FORMAT: '{created_year}/{correspondent}/{document_type}/{created_year}-{created_month}-{created_day} - {document_type} - {correspondent} - {title}'
      PAPERLESS_FILENAME_FORMAT_REMOVE_NONE: true
      PAPERLESS_AUTO_LOGIN_USERNAME: user
      PAPERLESS_ENABLE_NLTK: true
    networks:
     paperless-proxy:
     paperless-backbone:

 
networks:
 paperless-proxy:
  name: paperless-proxy
  external: true
 paperless-backbone:
  name: paperless-backbone
  internal: true
  driver: bridge
  ipam:
   config:
    - subnet: 172.63.0.0/24
 
Zuletzt bearbeitet:
x.treme schrieb:
Ja wie oben schon geschrieben, normales Verhalten. Wenn du kein Netzwerk selber definierst, wird für den Stack automatisiert ein eigenes Subnetz generiert.

Du kannst das Netzwerk selber in der Docker Compose wie oben beschrieben definieren für mehr Kontrolle. Musst es aber nicht.
Ergänzung ()

Mal als Beispiel, so sieht meine Docker-Compose für Paperless aus ;)

JSON:
version: "3.4"
services:
  broker:
    image: docker.io/library/redis:7
    restart: unless-stopped
    volumes:
      - /docker/paperless/redis:/data
    networks:
     paperless-backbone:
  db:
    image: docker.io/library/postgres:13
    restart: unless-stopped
    volumes:
      - /data/.docker-volumes/paperless/postgres:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: paperless
      POSTGRES_USER: paperless
      POSTGRES_PASSWORD: $DB_PASS
    networks:
     paperless-backbone:

  webserver:
    image: ghcr.io/paperless-ngx/paperless-ngx:latest
    restart: unless-stopped
    depends_on:
      - db
      - broker
    healthcheck:
      test: ["CMD", "curl", "-fs", "-S", "--max-time", "2", "http://localhost:8000"]
      interval: 30s
      timeout: 10s
      retries: 5
    volumes:
      - /docker/paperless/data:/usr/src/paperless/data
      - /usb/data/nextcloud/user/files/99_Utility/Paperless-Archiv:/usr/src/paperless/media
      - /usb/data/nextcloud/user/files/01_Dokumente:/usr/src/paperless/media/documents/archive
      - /usb/data/nextcloud/user/files/99_Utility/Paperless-Export:/usr/src/paperless/export
      - /usb/data/nextcloud/user/files/99_Utility/Paperless-Import:/usr/src/paperless/consume
    environment:
      PAPERLESS_REDIS: redis://broker:6379
      PAPERLESS_DBHOST: db
      PAPERLESS_DBPASS: $DB_PASS
      USERMAP_UID: 33
      USERMAP_GID: 33
      PAPERLESS_SECRET_KEY: $secret
      PAPERLESS_TIME_ZONE: Europe/Berlin
      PAPERLESS_OCR_LANGUAGE: deu
      PAPERLESS_URL: https://docs.home.arpa
      PAPERLESS_FILENAME_FORMAT: '{created_year}/{correspondent}/{document_type}/{created_year}-{created_month}-{created_day} - {document_type} - {correspondent} - {title}'
      PAPERLESS_FILENAME_FORMAT_REMOVE_NONE: true
      PAPERLESS_AUTO_LOGIN_USERNAME: user
      PAPERLESS_ENABLE_NLTK: true
    networks:
     paperless-proxy:
     paperless-backbone:

 
networks:
 paperless-proxy:
  name: paperless-proxy
  external: true
 paperless-backbone:
  name: paperless-backbone
  internal: true
  driver: bridge
  ipam:
   config:
    - subnet: 172.63.0.0/24
OK, also hast Du dem letzten Container 2 Netzwerke zugewiesen?
eins davon ein externer Proxy-Server, oder wie?

hier man eine fertige docker compose datei von ioBroker image:

version: '2'

services:
iobroker:
container_name: iobroker
image: buanet/iobroker
hostname: iobroker
restart: always
ports:
- "8081:8081"

volumes:
- iobrokerdata:/opt/iobroker
1. Könnte ich dann für die Benutzung "im Hostnetzwerk" um das ergänzen:?

Networks:
network_mode: host
oder muss das anderes aussehen?

2. muss dann bei der Benutzung vom Host der Part mit der Ports raus?
 
Genau, ich erstelle immer für alle Utility-Container (e.g. MySQL, Redis, etc) ein isoliertes Netzwerk ohne Internet-Zugriff und verbinden den Haupt-Container für den Webserver mit dem mit Nginx Proxy Manager geteilten Netzwerk. Einfach als zusätzliche Sicherheit für maximale Isolierung.

Bzgl. Inobroker: Ich würde eher schauen, ob du dem Inobroker über MacVLAN eine eigene IP in deinem Netzwerk zuweisen kannst. Network_mode:host kann zu Port-Konflikten führen mit deinem Host-OS.

Ansonsten ja, network_mode: host bei services inobroker rein und die Ports raus.
 
OK, also nicht networks, sodern direkt als einzelnen punkt unter den iobroker den punkt
network_mode: host rein?
MACVLAN: Kene mich da wie man merkt kaum aus, wie sowas geht.
 
OK, dort wird a nur manuell ei container erstellt und in ein schon vorhandenes MACVLAN eingefügt.. aber ok.
Dann eben nicht 🙃
Ergänzung ()

ich verstehe bei dem Portainer eh manches nicht.
Was genau ist der unterschied zwischen volumes und binds?
und warum habe ich so viele values, die "unused" sind?
1697281752670.png

ich mounte immer direkt mit /volume1/docker/...
die Order sind nicht bei den Volumes drin.
 
Zuletzt bearbeitet:
Klick drauf und dann siehst du welcher Container das Volume generiert hat.

Im Docker-Image gibt es eine Deklaration von Volumes. Volumes die nicht in der Docker-Compose aber im Image selber deklariert sind werden dann automatisiert erstellt.

Du kannst dir gewisse Clean-Cronibs einrichten, welche unused Volumes automatisiert löscht.
 
Zurück
Oben