Falha na atualização: versão do Docker não suportada

Ubuntu 16
Clicamos na atualização via web como fizemos várias vezes. falhou, agora o aplicativo não consegue mais reconstituir a versão do Docker não suportada.

Alguma ideia? Eu poderia tentar atualizar o sistema operacional, etc., mas isso leva muito tempo que eu não tinha hoje.

De qualquer forma, é possível voltar?

Tentei definir a versão para o hash antigo, mas imediatamente recebo a mensagem de que a versão do Docker não é suportada ao tentar reconstruir

Você não pode fazer a atualização.

Eu recomendaria mover para uma nova máquina virtual (VM) e restaurar o banco de dados lá. É mais fácil, tem pouco tempo de inatividade, e se algo der errado, você simplesmente continua usando o servidor que funciona.

Ah. Desculpe. Eu não li com atenção suficiente.

Não. Você não pode voltar.

Você pode ser capaz de atualizar o docker se usar a instalação do docker.

Eu atualizei o sistema operacional etc. e passou pelo upgrade do Postgres 15, mas agora, ao fazer rebuild do aplicativo, recebo

2025-05-18 14:58:28.208 UTC [1455] discourse@discourse ERRO: coluna "require_message" não existe na linha 72
2025-05-18 14:58:28.208 UTC [1455] discourse@discourse DECLARAÇÃO: 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
** FALHA NO PLUGIN **

Você não pode iniciar o Discourse devido a esse erro durante a inicialização do plugin:

PG::UndefinedColumn: ERRO: coluna "require_message" não existe
LINHA 1: ..._key, description, notify_type, auto_action_type, require_me...
                                                             ^

Depois de executar rebuild (após a atualização do Postgres)

Realizando atualização
------------------
Analisando todas as linhas no novo cluster                       ok
Congelando todas as linhas no novo cluster                        ok
Excluindo arquivos do novo pg_xact                                ok
Copiando old pg_xact para o novo servidor                          ok
Configurando o menor XID para o novo cluster                      ok
Configurando próximo ID de transação e época para o novo cluster   ok
Excluindo arquivos do novo pg_multixact/offsets                     ok
Copiando old pg_multixact/offsets para o novo servidor             ok
Excluindo arquivos do novo pg_multixact/members                     ok
Copiando old pg_multixact/members para o novo servidor              ok
Configurando próximo ID de multixact e deslocamento para o novo cluster ok
Redefinindo arquivos WAL                                        ok
Configurando os counters frozenxid e minmxid no novo cluster     ok
Restaurando objetos globais no novo cluster                     ok
Restaurando esquemas do banco de dados no novo cluster            ok
Copiando arquivos de relação do usuário                        ok
Configurando próximo OID para o novo cluster                       ok
Sincronizando dados no disco                                      ok
Criando script para excluir o antigo cluster                        ok
Verificando atualizações de extensão                              aviso

Sua instalação contém extensões que devem ser atualizadas
com o comando ALTER EXTENSION. O arquivo
    update_extensions.sql
quando executado pelo psql pelo superusuário do banco de dados, atualizará
essas extensões.


Atualização concluída
----------------
As estatísticas do otimizador não são transferidas pelo pg_upgrade.
Após iniciar o novo servidor, considere rodar:
    /usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages

Executar esse script excluirá os arquivos de dados do antigo cluster:
    ./delete_old_cluster.sh
-------------------------------------------------------------------------------------
ATUALIZAÇÃO DO POSTGRES CONCLUÍDA

O banco de dados antigo 13 está armazenado em /shared/postgres_data_old

Para concluir a atualização, reconstrua novamente usando:

./launcher rebuild app

Posso fazer algo? Não tenho certeza de como a coluna está faltando.

Sim. Existem alguns tópicos sobre problemas semelhantes. Uma migração foi revertida, eu acho, então você fica em um estado de limbo.

Talvez adicione a coluna manualmente.

Não tenho certeza de como fazer isso, mais especificamente a qual tabela etc. Existe alguma informação sobre isso que eu possa encontrar? Encontrei aquele post que você mencionou, mas não havia detalhes específicos.

Obrigado!

Nem consigo montar o banco de dados o suficiente para adicionar a coluna. Vou tentar desativar todos os plugins e ver se consigo pelo menos iniciar o container.

Ok, eis como conseguimos consertar (Não é para os fracos de coração)

  1. Atualize o Ubuntu para uma versão que suporte Docker 20+
    Estávamos no Ubuntu 16, tive que ir para pelo menos o Ubuntu 20, então fizemos essa atualização duas vezes
RELEASE_UPGRADER_ALLOW_THIRD_PARTY=1 do-release-upgrade
  1. Assim que chegamos ao Ubuntu 20, tivemos que atualizar o Docker, o que o Ubuntu se recusou a fazer por conta própria.
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

# Adicione o repositório às fontes do 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
  1. Isso nos levou ao docker 28
  2. Em seguida, execute
./launcher rebuild app
  1. Isso atualizará seu postgress de 13 para 15, veja:
    PostgreSQL 15 update
  2. Assim que o banco de dados foi atualizado com sucesso, executamos
./launcher rebuild app
  1. Isso gerou um erro sobre coluna ausente
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
** FALHA NO PLUGIN **

Você não pode iniciar o Discourse devido a este erro durante a inicialização do plugin:

PG::UndefinedColumn: ERROR:  column "require_message" does not exist
LINE 1: ..._key, description, notify_type, auto_action_type, require_me...
                                                             ^
  1. Neste ponto, não há como iniciar o contêiner, então fui ao app.yml e desabilitei todos os plugins, em seguida, executei o rebuild novamente
  2. O aplicativo finalmente foi reconstruído, então pude entrar no console do rails para adicionar a coluna acima manualmente.
./launcher enter app
rails db
ActiveRecord::Base.connection.execute("ALTER TABLE flags ADD COLUMN require_message BOOLEAN DEFAULT FALSE;")
exit
exit
  1. Assim que a coluna estava presente, voltei ao app.yml, habilitei todos os plugins e fiz um rebuild novamente
  2. O rebuild foi bem-sucedido… e estamos online!

Obrigado @pfaffman pela sua pronta resposta, mesmo no fim de semana. Vamos criar um novo droplet atualizado e migrar. Esta deveria ser uma atualização rápida no local pela interface web. Mas acho que o script não testa a compatibilidade do docker. Quando ele atualizou o discourse docker, ele lançou um erro de docker incompatível.

Isso foi totalmente culpa nossa por estarmos em uma versão tão antiga do Ubuntu 16. Uma das coisas boas e ruins de um sistema estável é que ele tende a perdurar.

1 curtida

Fico feliz que tenha funcionado! Isso é bastante impressionante!

Você não consegue fazer atualizações rápidas quando seu sistema operacional está 4 anos além do fim da vida útil. :wink:

1 curtida

Yuup, Lições Aprendidas, obrigado novamente!

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