Я запускаю Discourse в отдельном Docker-контейнере в директории /var/discourse.
Я попытался обновить встроенную базу данных PostgreSQL с версии 15 до 18. Обновление, казалось, завершилось успешно, и в активной директории данных теперь отображается:
/shared/postgres_data/PG_VERSION
18
Однако в пересобранном контейнере Discourse по-прежнему присутствуют только бинарные файлы PostgreSQL 15:
/usr/lib/postgresql/15/bin/postgres
postgres (PostgreSQL) 15.18
Служба PostgreSQL настроена на запуск:
/usr/lib/postgresql/15/bin/postmaster -D /etc/postgresql/15/main
тогда как фактическая директория данных Discourse смонтирована в:
/shared/postgres_data
В результате PostgreSQL завершается с ошибкой:
FATAL: database files are incompatible with server
DETAIL: The data directory was initialized by PostgreSQL version 18,
which is not compatible with this version 15.18
(Debian 15.18-1.pgdg12+1).
Мне известно, что в последних Docker-образах Discourse должны содержаться бинарные файлы PostgreSQL 18. Я изменил app.yml, чтобы использовать шаблон PostgreSQL 18, и пересобрал приложение, но в полученном контейнере по-прежнему находятся бинарные файлы PostgreSQL 15, а скрипт службы все еще указывает на /etc/postgresql/15/main.
Соответствующая часть моей текущей конфигурации службы:
HOME=/var/lib/postgresql USER=postgres exec thpoff \
chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert \
/usr/lib/postgresql/15/bin/postmaster -D /etc/postgresql/15/main
Мои вопросы:
-
Каков правильный способ пересобрать или обновить контейнер Discourse, чтобы в нем действительно содержались бинарные файлы PostgreSQL 18?
-
Существует ли определенный шаблон или тег образа, который следует использовать в
app.yml? -
Как только PostgreSQL 18 станет доступен, какова поддерживаемая процедура его запуска против существующей директории
/shared/postgres_data?
Я не удалял и не переинициализировал директории данных PostgreSQL 18. Я предпочел бы восстановить обновленный кластер, а не восстанавливать старые данные PostgreSQL 15.