空间不足时升级:停止应用,然后清理,然后重建应用?

大家好。这个问题听起来可能很蠢,但我还是想问一下。

我陷入了一个熟悉的循环:

  1. 升级失败。
  2. 尝试运行 ./launcher rebuild app,但磁盘空间不足。(剩余不到 5 GB。)
  3. 运行 ./launcher cleanup,这似乎释放了一些磁盘空间。(剩余超过 5 GB。)
  4. 回到步骤 2。

由于我还不太清楚哪些操作是安全的(即不会破坏我的网站数据),我小心翼翼地摸索着,希望能避免从备份中恢复。我最终做了以下操作,似乎对我有效:

  1. 运行 ./launcher stop app
  2. 运行 ./launcher cleanup,这次清理出的空间比之前多了很多,这让我立刻感到紧张。
  3. 运行 git pull
  4. 运行 ./launcher rebuild app

这不仅成功了,而且网站运行正常,数据完好无损,并且剩余空间比之前多了大约 2 GB。

现在我不确定我所做的操作是聪明、显而易见,还是有风险但恰好奏效。我想更好地理解为什么我会得到这样的结果,以及这是否是一种合理的升级方式。

非常感谢。

1 个赞

docker 在构建容器时会创建大量文件(包括它构建的容器)。当你构建一个新容器时,你仍然拥有旧容器(以及磁盘映像)。这就是清理时会删除的内容。

在 discourse 运行时执行清理命令会稍微安全一些,因为清理命令不会删除正在运行的容器。如果重建出现问题,你仍然可以重新启动旧容器(如果它存在)。

因此,我会删除上面第 (1) 步,而第 (3) 步是不必要的,因为 ./launcher 会执行拉取(以前它不会)。

可能是错的,但这是否会导致第一个未正常工作的块中相同的两个步骤(2-4)?

顺便说一句,这看起来有点像这个话题的更多内容:

2 个赞

哎呀。是的。我没重读。

所以,如果你的磁盘空间非常紧张,以至于没有空间放两个镜像,那么你需要销毁所有镜像,然后再构建一个新的镜像,如果你因为某些原因无法构建新的镜像,那你就陷入了困境。如果是这种情况,你真的需要更多的磁盘空间。最简单的方法是将备份移到 S3。

1 个赞

“磁盘空间如此紧张”在我的情况下让我感到惊讶。我运行清理,有 7.9 GB 的可用空间,然后我运行 ./launcher rebuild app,它拒绝完成。在我想要重建应用程序时,7.9 GB 的可用空间真的太少了?!

(更新:现在我明白了这是如何发生的。我把它留在这里供无辜的旁观者在网络搜索中找到。请阅读整个帖子,各位!)

谢谢!这确实是问题所在!而这似乎是关键点:"Less than 5GB of free space" — not true! 👀 - #3 by Simon_Manning

特别是:

对于这次特定的重建,您需要下载一个新的基础镜像

最好能以某种方式将此信息包含在升级过程中,无论是作为提前警告“我们需要下载一个新的基础镜像,所以您可能需要比平时多 3 GB 的空间才能升级。如果您空间不足,那很可能就是原因。”,还是在升级/重建过程空间不足时提供更详细的错误提示。否则,我们就会陷入一个无休止的循环:“好了!您(似乎)有足够的空间了!”(皮卡德伸出手臂。)

另外,当您想说“相信我,兄弟。我有足够的磁盘空间。”时,不必费力去寻找使用 ./launcher rebuild app --skip-prereqs 的选项,这也会很有帮助。是的,请用粗体、红色、72 号字体显示警告。

这种“新基础镜像使升级变得棘手”的情况发生得并不频繁,以至于我们会忘记它,但在升级过程中却会造成问题。关于如何解决这些问题的文章,最合适的地方在哪里?

谢谢。

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