Vorhandenes Image wiederherstellen

MikeXXL

New member
Moin, ich habe meine Proxmox-Server einem Update unterzogen, Hatte Ubuntu drauf und und nun Proxmox 8.3.0. Dabei habe ich auch das ein oder andere Docker Image via Portainer neu gleaden.
Das war nocht so gut, da ich eine Postgre-SQL aktulisiert habe und meinen vorhandenen Datenbestand nicht wiederfinde.
Nun habe ich gesehen, dass die alten Images noch vorhanden sind. Wie kann ich die alten Images wieder aktivieren? dann müsste ich doch auch auf die alte DB wieder zugreifen können, oder habe ich einen Denkfehler?
Danke für die Unterstützung
Michael
P.S. Es handelt sich um Tandoor, da sind meine gesamelten Rezepte als Hobbykoch drin.
 
Naja, mit PVE hat das Docker-Problem ja nun erstmal nichts zu tun. Du kannst bei der Image-Angabe auch ein konkretes Tag verwenden (anstatt einfach nur "latest"). Läuft der DB-Container denn überhaupt und falls ja, ist evtl. irgendwas an Fehlern in den Container-Logs zu finden?
 
Ja, der neue DB-Container mit "latest" läuft, hat aber die alten Daten nicht mitgenommen. War wohl ein update von postgreSQL dabei. Die "alten" Images haben kein Tag, deswegen kann ich die auch nicht exportieren. Irgendwie muss ich doch noch an die vorhandenen Daten der alten DB kommen können.
Und das war im Zuge des Update von PVE
 
1. Die Daten im Host-Verzeichnis oder Volume sind nach wie vor vorhanden, nur können sie nur von der entsprechenden Major.Minor Version von PostgreSQL verwendet werden. Wenn man die zu den Daten passende Image-Version verwendet, sollte die Daten für die entsprechende Datenbank-Version wieder zugreifbar sein.
2. Um Daten mit einer neuen PostgreSQL Version verwenden zu können, müssen diese mit der alten Version gedumped werden, dann der PostgreSQL Container auf-Basis des neuen Images erzeugt werden, und dort der Dump dann eingespielt werden.

Es gibt dutzende von Blog-Posts die einem zeigen, wie es geht, bspw. https://thomasbandt.com/postgres-docker-major-version-upgrade
 
:) , mein Gedanke war schon so ähnlich. Wie bekomme ich den die "alten" Images wieder zum laufen? Daran scheitert es bei mir, oder ich habe noch einen Denkfehler. Es läuft ja momentan die "latest" Version. Die andere Version hat "none".
Danke
 
Je nachdem wie viel Informationen jemand mit uns teilt, kann es von sehr einfach bis fast unmöglich sein zu helfen. Die Informationen die Du bisher geteilt hat sorgen eher für die zweite Kategorie.

Im Unterverzeichnis des Volumes sollte ein Verzeichnis mit der Versionsnummer zu finden sein.

Bei Postgres sollte man niemals(!!!) das latest Tag verwenden - da es über kurz oder lang genau zu dem Problem führt, dass Du gerade hast. Postgres benötigt manuelle Datenmigration beim Versionswechsel.
 
Man kann beim erzeugen eines Containers auch die IMAGE ID verwenden, statt REPOSITORY:TAG zu verwenden:
Code:
me@docker: ~$ docker image ls
REPOSITORY                TAG       IMAGE ID       CREATED        SIZE
<none>                    <none>    8052f6016157   45 hours ago   481MB
test                      latest    80e8c23a2e3a   45 hours ago   481MB

me@docker: ~$ docker run -ti --rm 8052f6016157

Ich kann dir aber nicht sagen, wie man das in Portainer macht, da ich Portainer nicht verwende - es ist mir zu umständlich in Oberflächen rumzuklicken.
 
Ich habe folgendes:

postgres latest 813dc60d83aa 10 days ago 435MB
vabene1111/recipes latest 7d033471ed1a 10 days ago 368MB
dpage/pgadmin4 latest da585b3c7d33 2 weeks ago 504MB
postgres <none> eb634efa7ee4 9 months ago 431MB
vabene1111/recipes <none> 8135a57d046b 9 months ago 370MB
portainer/agent 2.19.4 7ab8e2b377ba 11 months ago 212MB

Wo finde ich den postgreSQL unter Linux/PVE/Docker?
Sry, bin kein Linux-Mensch.
 
Die Frage kann dir nur jemand beantworten, der weiß, was du wie gemacht hat.

Annahme: Du hast Postgres über den Update-Mechanismus von Portainer aktualisiert. Dann sollte in der Konfiguration vom neuen Container zu sehen sein, was (=Volume oder Hostpfad) gegen den Container Pfad /var/lib/postgresql/data/ gemountet ist.

Du musst einen zusätzlichen Container mit identischer Konfiguration des aktuellen PostgreSQL Containers erstellen, nur eben mit der alten ImageID eb634efa7ee4, statt mit postgres:latest.

Da beide Container unterschiedliche PostgreSQL Versionen laufen lassen, kommen diese sich im Datenverzeichnis auch nicht in die Quere.
 
Irgendwie blicke ich es noch nicht. Ich habe ja 2 Container, 1 x die App tandoor und dann die dazugegörige DB tandor-db_recipes-1.
Ich habe 5 Images und 5 Volumes (davon ist in 2 Volumes nichts drin). Ich glaube zu wissen welchens Volume die DB sein könnte (es gibt hier 2, ich meine die ältere vom Februar ist es). Ich muss doch der App sagen, welche DB nun aktuell ist, und ich muss doch auch die alte APP nehmen, oder wie kann ich der neuen App mitteilen, welche DB nun genommen wird? Und wie bekomme ich das "latest" wieder weg?
Wenn ich es richtig gelesen habe, ist die alte DB Vers 16, die neue DB vers 17.
 
Wenn Du es nicht weißt, dann arbeite Dich rückwärts.
Aktuell ist postgres:latest = postgres:17
Also versuchst Du jetzt mal postgres:16
Wenn es läuft, hattest Du 16, und dann jetzt wieder 16, klappt es immer noch nicht, versuchst Du postgres:15

Da Du mit Portainer arbeitest, wirst Du irgendwo im Stack postgres:latest drinstehen haben. Dort das latest durch eine Versionsnummer ersetzen und den Stack redeployen.

Sonst kopier einfach mal den tandoor Stack, den Du verwendest hier hinein (mit Formatierungen).
 
1. Vorhandenen DB-Container duplizieren, gleicher Name?
2. Als Image das alte Image der Vers16 verwenden
3. Anpassen der ENV: Path, PG_Major, PG_Vers,
4. Labels anpassen? hash?? die alte Vers hat doch einen anderen hash / Image

fragen über fragen
 
Du wirst ja wohl einen Stack in der Art wie diesen hier verwendet haben:
YAML:
version: "3"
services:
  db_recipes:
    restart: always
    image: postgres:16-alpine
    volumes:
      - ./postgresql:/var/lib/postgresql/data
    env_file:
      - stack.env

  web_recipes:
    image: vabene1111/recipes:latest
    env_file:
      - stack.env
    volumes:
      - staticfiles:/opt/recipes/staticfiles
      # Do not make this a bind mount, see https://docs.tandoor.dev/install/docker/#volumes-vs-bind-mounts
      - nginx_config:/opt/recipes/nginx/conf.d
      - ./mediafiles:/opt/recipes/mediafiles
    depends_on:
      - db_recipes

  nginx_recipes:
    image: nginx:mainline-alpine
    restart: always
    ports:
      - 12008:80
    env_file:
      - stack.env
    depends_on:
      - web_recipes
    volumes:
      # Do not make this a bind mount, see https://docs.tandoor.dev/install/docker/#volumes-vs-bind-mounts
      - nginx_config:/etc/nginx/conf.d:ro
      - staticfiles:/static
      - ./mediafiles:/media

volumes:
  nginx_config:
  staticfiles:

Bei Dir wird aber wohl ganz oben statt

Code:
image: postgres:16-alpine

dann wohl

Code:
image: postgres:latest

drinstehen. Das einfach mal auf postgres:16 ändern und nochmal in Portainer „Deploy stack“ anklicken.
 
Da stand, so wie vorher auch, nur "image: postgres". Da habe ich auch nichts geändert
Muss ich dann ein re-pull & redeploy machen?
 
„image: postgres“ ist das gleiche wie „image: postgres:latest“.
Daher einfach einmal eine Versionsnummer dahinterschreiben, mit Doppelpunkt getrennt. Jetzt dürfte 17 installiert sein, also versuche mal 16.

ja re-pull, re-deploy. Re-pull wird aber vermutlich merken, daß die Version bereits heruntergeladen vorliegt, wenn es 16 war und schnell gehen, da dann auf das vorhandene Image zurückgegriffen wird.
 
Update the stack sollte reichen, wenn das nicht reicht, noch den Schalter bei re-pull/redeploy umlegen.
Hier dann auf Update klicken:
IMG_2027.jpeg
 

Letzte Anleitungen

Statistik des Forums

Themen
5.882
Beiträge
57.480
Mitglieder
5.818
Neuestes Mitglied
DefaultStandart
Zurück
Oben