Я узнал кое-что, что может помочь другим.
Предпосылки: Как подробно описано здесь, моя установка Discourse размещалась на VPS, где дискового пространства было недостаточно для завершения обновления. Сначала я нажал кнопку «Обновить» в панели администратора. Обновление не удалось, и графический интерфейс больше никогда не работал. После этого я зашел в консоль своего VPS и ввел известную команду ./launcher rebuild app. Она тоже не завершилась: у меня полностью закончилось дисковое пространство. Чтобы получить больше места и уложиться в бюджет, я решил перенести всю свою установку на новый VPS у другого хостинг-провайдера. Сохранение ценных данных сайта было приоритетом.
Неудачи: Два самых очевидных способа создания резервной копии не сработали:
- моя первоначальная попытка обновления сломала веб-интерфейс, поэтому не было возможности попасть в панель администратора и запустить резервное копирование оттуда; и
- попытка зайти внутрь контейнера Docker и выполнить там команды оболочки тоже не удалась. Рекомендуемая для этого команда —
/var/discourse/launcher enter app. Но, по крайней мере в моем случае, скриптlauncherпытался пересобрать приложение перед тем, как позволить мне войти в него, а пересборки постоянно не удавались, поэтому эта команда даже не давала мне доступа к контейнеру, не говоря уже о оболочке внутри него.
Успех: Я уже собирался сдаться, когда получил приятный сюрприз. Работая в командной строке моей небольшой виртуальной машины, я ввел docker ps и узнал, что есть активный контейнер с именем app. У Docker есть прямой способ зайти в работающий контейнер: команда docker exec -it app bash.
Внутри контейнера я смог продвинуться вперёд: я выполнил команду discourse backup, подождал несколько минут, а затем скопировал файл <backup>.tar.gz в безопасное новое место. С актуальной резервной копией на руках стало возможным завершить миграцию моей установки на новое место. (На этих форумах есть другие темы, показывающие, как это сделать.)
Ключевой момент здесь в том, что вышеуказанная команда docker для входа в контейнер сработала, даже когда специфичная для Discourse команда ./launcher не сработала.
Спасибо создателям и сопровождающим этот отличный продукт.