Обновление при нехватке места: остановить приложение, затем очистить, затем пересобрать приложение?

Привет, ребята. Это, наверное, глупый вопрос, но я всё же спрошу.

Я застрял в этом знакомом цикле:

  1. Обновление не удалось.
  2. Попробовал ./launcher rebuild app, но недостаточно места на диске. (Свободно менее 5 ГБ.)
  3. ./launcher cleanup, что, казалось, освободило немного места. (Свободно более 5 ГБ.)
  4. ПЕРЕЙТИ К ПУНКТУ 2.

Поскольку я ещё не до конца знаю, какие операции безопасны (то есть не уничтожат данные моего сайта), я нервно метался, надеясь, что не придётся восстанавливаться из резервной копии. В итоге я сделал следующее, и у меня это сработало.

  1. ./launcher stop app
  2. ./launcher cleanup, что освободило значительно больше места, чем в прошлый раз, что сразу же вызвало у меня тревогу.
  3. git pull
  4. ./launcher rebuild app

Это не только сработало, но и привело к тому, что сайт заработал с сохранёнными данными и с примерно на 2 ГБ большим свободным местом, чем было у меня ранее.

Теперь я не уверен, было ли то, что я сделал, гениальным, очевидным или рискованным, и просто повезло, что это сработало. Я хотел бы немного лучше понять, почему я получил такие результаты, и было ли это разумным способом обновления.

Большое спасибо.

При сборке контейнера Docker создает множество файлов (включая сами создаваемые контейнеры). При создании нового контейнера старые контейнеры (а также образы дисков) остаются. Именно они удаляются при выполнении очистки.

Запуск команды очистки во время работы Discourse немного безопаснее, так как эта команда не удалит запущенный контейнер. Если при пересборке что-то пойдет не так, вы сможете перезапустить старый контейнер, если он существует.

Поэтому я бы исключил шаг (1) выше, а шаг (3) становится ненужным, поскольку ./launcher выполняет команду pull (в старые времена этого не делал).

Может, я ошибаюсь, но не приведет ли это к тем же двум шагам, что и в первом блоке, которые не работали? (2–4):

Кстати, это выглядит довольно похоже на обсуждение в этой теме:

Ой, да. Я не перечитал это.

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

Меня удивляет фраза «место на диске настолько ограничено» в моей ситуации. Я запускаю очистку, у меня остаётся 7,9 ГБ свободного места, затем я запускаю ./launcher rebuild app, и процесс отказывается завершиться. Неужели 7,9 ГБ свободного места при желании пересобрать приложение действительно так мало?!

(ОБНОВЛЕНИЕ: Теперь я понимаю, как это может произойти. Оставляю это здесь для случайных прохожих, которые могут найти это через поиск в интернете. Пожалуйста, прочитайте всю эту тему, друзья!)

Спасибо! Действительно, это та самая проблема! И вот ключевой момент: "Less than 5GB of free space" — not true! 👀 - #3 by Simon_Manning

В частности:

Для этой конкретной пересборки вам нужно загрузить новый базовый образ

Было бы очень полезно каким-то образом включить эту информацию в процесс обновления: либо в виде предупреждения заранее («Нам нужно загрузить новый базовый образ, поэтому для обновления, скорее всего, потребуется на 3 ГБ больше места, чем обычно. Если места не хватит, скорее всего, причина в этом»), либо в виде более подробного сообщения об ошибке, когда процесс обновления/пересборки исчерпает свободное место. В противном случае мы попадаем в бесконечный цикл: «Вот! Вот всё место, которое вам (вроде бы) нужно!» (Пикард с вытянутой рукой.)

Также было бы крайне полезно не нужно так глубоко копаться, чтобы найти опцию использования ./launcher rebuild app --skip-prereqs, когда вы хотите сказать: «Поверь мне, бро. У меня достаточно места на диске». Да, выведите предупреждения жирным красным шрифтом 72 кегля.

Эта ситуация, когда «новый базовый образ делает обновление проблемным», случается у нас достаточно редко, чтобы мы о ней забывали, но всё же вызывает проблемы при обновлении. Где было бы уместно разместить статью, которая централизует всю известную информацию о том, как обходить эти проблемы?

Спасибо.