Как выполнить восстановление при наличии двух контейнеров?

Небольшой вопрос: как выполнить восстановление, когда у вас несколько контейнеров (data и web_only). Сначала я попробовал эту инструкцию из контейнера data:

root@docker2:/var/discourse# ./launcher enter data
x86_64 arch detected.
root@docker2-data:/# discourse enable_restore
bash: discourse: команда не найдена

OK, приложение discourse находится в контейнере web. Но здесь восстановление выбрасывает исключение и завершается с ошибкой:

Restore are now permitted. Disable them with `disable_restore`
root@forum:/var/www/discourse# discourse restore netzwissen-forum-2023-10-07-125819-v20230913194832.tar.gz
Plugin name is 'discourse-topic-voting', but plugin directory is named 'discourse-voting'
Starting restore: netzwissen-forum-2023-10-07-125819-v20230913194832.tar.gz
[STARTED]
'system' has started the restore!
Marking restore as running...
Making sure /var/www/discourse/tmp/restores/default/2023-10-07-132317 exists...
Copying archive to tmp directory...
EXCEPTION: /var/www/discourse/lib/discourse.rb:138:in `exec': Failed to copy archive to tmp directory.
cp: cannot stat '/var/www/discourse/public/backups/default/netzwissen-forum-2023-10-07-125819-v20230913194832.tar.gz': No such file or directory
/var/www/discourse/lib/discourse.rb:172:in `execute_command'
/var/www/discourse/lib/discourse.rb:138:in `exec'
/var/www/discourse/lib/discourse.rb:34:in `execute_command'
/var/www/discourse/lib/backup_restore/local_backup_store.rb:47:in `download_file'
/var/www/discourse/lib/backup_restore/backup_file_handler.rb:62:in `copy_archive_to_tmp_directory'
/var/www/discourse/lib/backup_restore/backup_file_handler.rb:22:in `decompress'
/var/www/discourse/lib/backup_restore/restorer.rb:42:in `run'
script/discourse:149:in `restore'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/thor-1.2.2/lib/thor/command.rb:27:in `run'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/thor-1.2.2/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/thor-1.2.2/lib/thor.rb:392:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/thor-1.2.2/lib/thor/base.rb:485:in `start'
script/discourse:290:in `<top (required)>'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.4.13/lib/bundler/cli/exec.rb:58:in `load'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.4.13/lib/bundler/cli/exec.rb:58:in `kernel_load'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.4.13/lib/bundler/cli/exec.rb:23:in `run'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.4.13/lib/bundler/cli.rb:492:in `exec'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.4.13/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.4.13/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.4.13/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.4.13/lib/bundler/cli.rb:34:in `dispatch'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.4.13/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.4.13/lib/bundler/cli.rb:28:in `start'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.4.13/exe/bundle:45:in `block in <top (required)>'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.4.13/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.4.13/exe/bundle:33:in `<top (required)>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Trying to rollback...
There was no need to rollback
Cleaning stuff up...
Removing tmp '/var/www/discourse/tmp/restores/default/2023-10-07-132317' directory...
Marking restore as finished...
Notifying 'system' of the end of the restore...
Finished!
[FAILED]
Restore done.

В чем секрет запуска восстановления в развертываниях с раздельными контейнерами data и web?

Спасибо, Томми

Вы загрузили резервную копию в /var/discourse/shared/web-only/default?

Вы можете выполнить

discourse restore

чтобы получить список доступных резервных копий.

Также вы можете выполнить резервное копирование только для веб-контейнера, чтобы увидеть, куда оно помещает файлы, и убедиться, что вы сохраняете их в правильном месте.

РЕДАКТИРОВАНИЕ: Я отредактировал исходный пост и добавил следующее:

Это помогло?

Хм,
нет, всё ещё не работает.

У меня есть файл резервной копии здесь:

thommie@docker2:/var/discourse/shared/web-only$ ls  
backups  log  netzwissen-forum-2023-10-09-201019-v20230913194832.tar.gz

Затем

root@docker2:/var/discourse# ./launcher enter web_only

x86_64 arch detected.  
root@forum:/var/www/discourse#

root@forum:/var/www/discourse# discourse restore  
Вы должны указать имя файла для восстановления. Может быть, вы имели в виду один из следующих?  
  
discourse restore forum-netzwissen-eu-2023-10-08-033221-v20230926165821.tar.gz

Итак, команда restore показывает только файл резервной копии внутри контейнера web_only нового экземпляра форума (цель резервного копирования). Но не файл резервной копии из исходного экземпляра, который доступен по пути /var/discourse/shared/web-only/ на ХОСТ-системе.

Таким образом, “discourse restore” не использует смонтированный том на хосте, а только тот, что внутри контейнера.

??

Это должно находиться в /var/discourse/shared/web-only/backups/default

Внутри контейнера выполните

 discourse backup

и посмотрите, куда сохраняется резервная копия, затем поместите свою в то же место.

@pfaffman вы правы, я был не в той папке, восстановление завершено успешно

спасибо за помощь!