Error al actualizar: versión de Docker no soportada

Ubuntu 16
Hicimos clic en la actualización web como lo hemos hecho muchas veces. ahora falló y la aplicación no reconstruye la versión de Docker no compatible.

¿Alguna idea? Podría intentar actualizar el sistema operativo, etc., pero eso es mucho tiempo que no tenía hoy.

¿Hay alguna forma de volver?

Intenté configurar la versión al hash antiguo, pero inmediatamente obtengo la versión de Docker no compatible cuando intento reconstruir

No puedes actualizar.

Yo movería a una nueva máquina virtual y restauraría la base de datos allí. Es más fácil, tiene poco tiempo de inactividad, y si algo sale mal, simplemente sigues usando el servidor que funciona.

Oh. Lo siento. No leí con suficiente atención.

No. No puedes volver atrás.

Es posible que puedas actualizar docker si usas la instalación de docker.

Obtuve la actualización del sistema operativo, etc., y pasó por la actualización de Postgres 15, pero ahora cuando hago reconstruir la aplicación, obtengo

2025-05-18 14:58:28.208 UTC [1455] discourse@discourse ERROR:  columna "require_message" no existe en el carácter 72
2025-05-18 14:58:28.208 UTC [1455] discourse@discourse ESTADO:  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
** FALLA DEL PLUGIN **

No se puede iniciar Discourse debido a este error durante la
inicialización del plugin:

PG::UndefinedColumn: ERROR:  columna "require_message" no existe
LINE 1: ..._key, description, notify_type, auto_action_type, require_me...
                                                             ^

Después de ejecutar la reconstrucción (después de la actualización de Postgres)

Realizando la actualización
------------------
Analizando todas las filas en el nuevo clúster                       ok
Congelando todas las filas en el nuevo clúster                        ok
Eliminando archivos del nuevo pg_xact                             ok
Copiando old pg_xact al nuevo servidor                           ok
Estableciendo el XID más antiguo para el nuevo clúster                        ok
Estableciendo el siguiente ID de transacción y la época para el nuevo clúster       ok
Eliminando archivos de pg_multixact/offsets                            ok
Copiando los offsets antiguos de pg_multixact a la nuevo servidor              ok
Eliminando archivos de pg_multixact/members                ok
Copiando los antiguos miembros de pg_multixact a la nuevo servidor              ok
Estableciendo el siguiente ID de multixact y el desplazamiento para el nuevo clúster        ok
Restableciendo archivos WAL                                    ok
Estableciendo los contadores frozenxid y minmxid en el nuevo clúster       ok
Restaurando objetos globales en el nuevo clúster                 ok
Restaurando esquemas de la base de datos en el nuevo clúster               ok
Copiando archivos de relaciones de usuarios                                 ok
Estableciendo el siguiente OID para el nuevo clúster                            ok
Sincronizando la base de datos en disco                                 ok
Creando un script para eliminar el antiguo clúster                       ok
Verificando actualizaciones de extensión                              aviso

Tu instalación contiene extensiones que deben actualizarse
con el comando ALTER EXTENSION.  El archivo
    update_extensions.sql
cuando se ejecute con psql como superusuario de la base de datos actualizará
estas extensiones.


Actualización completa
----------------
Las estadísticas del optimizador no se transfieren mediante pg_upgrade.
Una vez que inicies el nuevo servidor, considera ejecutar:
    /usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages

Ejecutar este script eliminará los archivos de datos del antiguo clúster:
    ./delete_old_cluster.sh
-------------------------------------------------------------------------------------
FINALIZADA LA ACTUALIZACIÓN DE POSTGRES

La base de datos antigua 13 está almacenada en /shared/postgres_data_old

Para completar la actualización, reconstruye nuevamente usando:

./launcher rebuild app

¿Hay algo que pueda hacer? No estoy seguro de cómo falta una columna.

Sí. Hay algunos temas sobre problemas similares. Una migración se revirtió, creo, así que te quedas en un estado de limbo.

Quizás agregues la columna manualmente.

No estoy seguro de cómo hacer eso, más específicamente a qué tabla, etc. ¿Hay alguna información al respecto que pueda encontrar? Encontré esa publicación que mencionas, pero no había detalles específicos.

¡Gracias!

Ni siquiera puedo montar la base de datos lo suficiente como para agregar la columna. Voy a intentar deshabilitar todos los plugins y ver si al menos puedo iniciar el contenedor.

Ok, aquí te explicamos cómo lo solucionamos (no es para los débiles de corazón)

  1. Actualizar Ubuntu a una versión que admita Docker 20+
    Estábamos en Ubuntu 16 y tuve que llegar al menos a Ubuntu 20, así que hicimos esta actualización dos veces
    RELEASE_UPGRADER_ALLOW_THIRD_PARTY=1 do-release-upgrade
    
  2. Una vez que llegamos a Ubuntu 20, tuvimos que actualizar Docker, lo cual Ubuntu se negó a hacer por sí solo.
    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
    
    # Añadir el repositorio a las fuentes de Apt:
    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
    
  3. Eso nos llevó a Docker 28
  4. Luego ejecuta
    ./launcher rebuild app
    
  5. Esto actualizará tu PostgreSQL de la versión 13 a la 15, consulta:
    PostgreSQL 15 update
  6. Una vez que la base de datos se actualizó correctamente, ejecuté
    ./launcher rebuild app
    
  7. Esto arrojó un error sobre una columna faltante
    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
    ** FALLO DEL PLUGIN **
    
    No puedes iniciar Discourse debido a este error durante la inicialización del plugin:
    
    PG::UndefinedColumn: ERROR:  column "require_message" does not exist
    LINE 1: ..._key, description, notify_type, auto_action_type, require_me...
                                                                 ^
    
  8. En este punto, no hay forma de iniciar el contenedor, así que fui a app.yml y deshabilité todos los plugins, luego ejecuté la reconstrucción de nuevo.
  9. La aplicación finalmente se reconstruyó, luego pude ingresar a la consola de Rails para agregar la columna anterior manualmente.
    ./launcher enter app
    rails db
    ActiveRecord::Base.connection.execute("ALTER TABLE flags ADD COLUMN require_message BOOLEAN DEFAULT FALSE;")
    exit
    exit
    
  10. Una vez que la columna estuvo presente, volví a app.yml y habilité todos los plugins e hice una reconstrucción de nuevo.
  11. La reconstrucción tuvo éxito… ¡y estamos en funcionamiento!

Gracias @pfaffman por tu pronta respuesta, incluso un fin de semana. Vamos a crear un nuevo droplet actualizado y a migrar. Se suponía que esto sería una actualización rápida en el lugar desde la interfaz web. Pero supongo que el script no prueba la compatibilidad de Docker. Cuando actualizó Discourse Docker, arrojó un error de Docker incompatible.

Esto fue totalmente culpa nuestra por estar en una versión tan antigua de Ubuntu 16; una de las cosas buenas y malas de un sistema estable es que tiende a perdurar.

1 me gusta

¡Me alegra que lo hayas solucionado! ¡Es bastante impresionante!

No puedes hacer actualizaciones rápidas cuando tu sistema operativo tiene 4 años más allá de su fecha de fin de vida útil. :wink:

1 me gusta

¡Sí, lección aprendida, gracias de nuevo!

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