Upgrade-Fehler: Nicht unterstützte Docker-Version

Ubuntu 16
Haben wie viele Male zuvor die Web-Upgrade-Schaltfläche geklickt. Jetzt ist es fehlgeschlagen, und die App kann die unsupported Docker-Version nicht neu erstellen.

Irgendwelche Ideen? Ich könnte versuchen, das Betriebssystem zu aktualisieren etc., aber das ist heute viel Zeit, die ich nicht hatte.

Gibt es eine Möglichkeit, zurückzugehen?

Ich habe versucht, die Version auf den alten Hash zu setzen, aber ich erhalte sofort die Meldung unsupported Docker-Version, wenn ich versuche, neu zu erstellen.

Sie können nicht aktualisieren.

Ich würde auf eine neue VM umziehen und die Datenbank dort wiederherstellen. Es ist einfacher, hat eine geringe Ausfallzeit, und wenn etwas schiefgeht, können Sie einfach den funktionierenden Server weiter verwenden.

Oh. Entschuldigung. Ich habe nicht sorgfältig genug gelesen.

Nein. Sie können nicht zurückgehen.

Sie können Docker möglicherweise aktualisieren, wenn Sie die Installation von Docker verwenden.

Ich habe das Betriebssystem aktualisiert usw. und es wurde das PostgreSQL 15-Upgrade durchlaufen, aber jetzt erhalte ich beim Neuaufbau der App

2025-05-18 14:58:28.208 UTC [1455] discourse@discourse FEHLER:  Spalte "require_message" existiert nicht bei Zeichen 72
2025-05-18 14:58:28.208 UTC [1455] discourse@discourse STATEMENT:  SELECT id, name, name_key, description, notify_type, auto_action_type, require_message, applies_to, position, enabled, score_type FROM "flags" ORDER BY "flags"."position" ASC
** PLUGIN-FEHLER **

Sie können discourse wegen dieses Fehlers während der Plugin-Initialisierung nicht starten:

PG::UndefinedColumn: FEHLER:  Spalte "require_message" existiert nicht
ZEILE 1: ..._key, description, notify_type, auto_action_type, require_me...
                                                             ^

Nachdem ich das Neuaufbauen nach dem PostgreSQL-Upgrade ausgeführt habe

Durchführung des Upgrades
------------------
Alle Zeilen im neuen Cluster analysieren                        ok
Alle Zeilen im neuen Cluster einfrieren                         ok
Dateien aus dem neuen pg_xact löschen                             ok
Alte pg_xact auf neuen Server kopieren                           ok
Älteste XID für neuen Cluster setzen                          ok
Nächste Transaktions-ID und Epoche im neuen Cluster setzen       ok
Dateien aus neuen pg_multixact/offsets löschen                ok
Alte pg_multixact/offsets auf neuen Server kopieren              ok
Dateien aus neuen pg_multixact/members löschen                ok
Alte pg_multixact/members auf neuen Server kopieren              ok
Nächste Multixact-ID und Offset für neuen Cluster setzen        ok
WAL-Archive zurücksetzen                                      ok
Frozentxid- und minmxid-Zähler im neuen Cluster setzen       ok
Globale Objekte im neuen Cluster wiederherstellen                 ok
Datenbankschemata im neuen Cluster wiederherstellen               ok
Benutzerbezogene Relationendateien kopieren                                 ok
Nächste OID für neuen Cluster setzen                            ok
Datenverzeichnis synchronisieren                                 ok
Skript zum Löschen des alten Clusters erstellen                       ok
Erweiterungs-Updates prüfen                              Hinweis

Ihre Installation enthält Erweiterungen, die mit dem Befehl ALTER EXTENSION aktualisiert werden sollten.
Die Datei
    update_extensions.sql
kann von psql vom Datenbank-Superuser ausgeführt werden, um diese Erweiterungen zu aktualisieren.


Upgrade abgeschlossen
----------------
Optimierer-Statistiken werden nicht durch pg_upgrade übertragen.
Sobald Sie den neuen Server starten, sollten Sie folgende Befehle ausführen:
    /usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages

Dieses Skript löscht die Daten des alten Clusters:
    ./delete_old_cluster.sh
-------------------------------------------------------------------------------------
UPGRADE VON POSTGRES ABGESCHLOSSEN

Die alte 13-Datenbank befindet sich unter /shared/postgres_data_old

Um das Upgrade abzuschließen, bauen Sie die App erneut mit:

./launcher rebuild app

Gibt es etwas, das ich tun kann? Ich bin nicht sicher, warum eine Spalte fehlt.

Ja. Es gibt einige Themen zu ähnlichen Problemen. Eine Migration wurde rückgängig gemacht, glaube ich, sodass Sie in einem Schwebezustand verbleiben.

Vielleicht fügen Sie die Spalte manuell hinzu.

Ich bin mir nicht sicher, wie man das macht, genauer gesagt, auf welche Tabelle usw. Gibt es dazu irgendwelche Informationen, die ich finden kann? Ich habe den Beitrag gefunden, den Sie erwähnt haben, aber es gab keine Details.

Vielen Dank!

Ich kann das DB nicht einmal genug mounten, um die Spalte hinzuzufügen. Ich werde versuchen, alle Plugins zu deaktivieren und sehen, ob ich den Container zumindest starten kann.

Ok, hier ist, wie wir es behoben haben (nichts für schwache Nerven)

  1. Ubuntu auf eine Version upgraden, die Docker 20+ unterstützt
    Wir waren auf Ubuntu 16, ich musste mindestens auf Ubuntu 20 kommen, also haben wir dieses Upgrade zweimal durchgeführt
RELEASE_UPGRADER_ALLOW_THIRD_PARTY=1 do-release-upgrade
  1. Sobald wir auf Ubuntu 20 waren, mussten wir Docker aktualisieren, was Ubuntu von sich aus nicht tun wollte.
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Das Repository zu Apt-Quellen hinzufügen:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release & echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
  1. Das brachte uns zu Docker 28
  2. Dann ausführen
./launcher rebuild app
  1. Dies wird Ihr PostgreSQL von 13 auf 15 upgraden, siehe:
    PostgreSQL 15 update
  2. Sobald die Datenbank erfolgreich aktualisiert wurde, wurde Folgendes ausgeführt:
./launcher rebuild app
  1. Dies ergab einen Fehler bezüglich einer fehlenden Spalte
2025-05-18 14:58:28.208 UTC [1455] discourse@discourse ERROR:  column "require_message" does not exist at character 72
2025-05-18 14:58:28.208 UTC [1455] discourse@discourse STATEMENT:  SELECT id, name, name_key, description, notify_type, auto_action_type, require_message, applies_to, position, enabled, score_type FROM "flags" ORDER BY "flags"."position" ASC
** PLUGIN FAILURE **

Sie können Discourse aufgrund dieses Fehlers bei der Plugin-Initialisierung nicht starten:

PG::UndefinedColumn: ERROR:  column "require_message" does not exist
LINE 1: ..._key, description, notify_type, auto_action_type, require_me...
                                                             ^
  1. An diesem Punkt gibt es keine Möglichkeit, den Container zu starten. Also ging ich zu app.yml, deaktivierte alle Plugins und führte erneut einen Rebuild durch.
  2. Die App wurde schließlich neu erstellt, dann konnte ich die Rails-Konsole aufrufen, um die obige Spalte manuell hinzuzufügen.
./launcher enter app
rails db
ActiveRecord::Base.connection.execute("ALTER TABLE flags ADD COLUMN require_message BOOLEAN DEFAULT FALSE;")
exit
exit
  1. Sobald die Spalte vorhanden war, ging ich zurück zu app.yml, aktivierte alle Plugins und führte erneut einen Rebuild durch.
  2. Der Rebuild war erfolgreich… und wir sind online!

Vielen Dank an @pfaffman für Ihre prompte Antwort, sogar am Wochenende. Wir werden einen neuen, aktualisierten Droplet erstellen und dorthin umziehen. Dies sollte ein schneller In-Place-Upgrade über die Weboberfläche sein. Aber ich schätze, das Skript prüft nicht die Docker-Kompatibilität. Als es Docker für Discourse aktualisierte, gab es einen Fehler wegen inkompatiblen Docker-Versionen.

Das war vollständig unsere Schuld, da wir auf einer so alten Version von Ubuntu 16 waren. Eines der guten und schlechten Dinge an einem stabilen System ist, dass es dazu neigt, zu verharren.

1 „Gefällt mir“

Schön, dass es funktioniert hat! Das ist ziemlich beeindruckend!

Schnelle Updates gibt es nicht, wenn Ihr Betriebssystem 4 Jahre über das Ende des Lebenszyklus (EOL) hinaus ist. :wink:

1 „Gefällt mir“

Yuup, Lektion gelernt, danke noch einmal!

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.