我们在 DigitalOcean 上运行了一个自托管的 Discourse 站点,拥有一个 25 GB 的磁盘。我刚刚尝试更新我们的 Discourse 镜像,收到了需要更多空间才能继续的消息。在清理了 docker 镜像和容器后,我们仍然缺少 0.4 GB。
有什么节省空间的建议吗?既为了立即更新,也为了将来节省空间。我知道我们很快就需要调整大小,但能够至少再进行一次 Discourse 镜像更新将非常有帮助。
我们在 DigitalOcean 上运行了一个自托管的 Discourse 站点,拥有一个 25 GB 的磁盘。我刚刚尝试更新我们的 Discourse 镜像,收到了需要更多空间才能继续的消息。在清理了 docker 镜像和容器后,我们仍然缺少 0.4 GB。
有什么节省空间的建议吗?既为了立即更新,也为了将来节省空间。我知道我们很快就需要调整大小,但能够至少再进行一次 Discourse 镜像更新将非常有帮助。
您是否在本地存储备份?
如果是,也许删除一些旧的备份会有所帮助。0.4GB(即400MB)应该可以处理。
您也可以尝试清理主机系统上的一些空间。
尝试重启服务器,然后如果确定有足够的空间,请重试。
我们使用 DigitalOcean 的备份功能。我没有看到手动删除我们某个备份的选项。
我该如何着手进行?我没有编程经验,但在得到一些指导后,我能够理解做什么以及为什么这样做。
尝试重启后没有变化。
尝试清理未使用的 Docker 对象
此时,我会省去麻烦,现在就进行调整大小的工作。
我清理了除未使用的卷之外的所有内容,因为 docker volume ls 显示我们只有一个。
你试过了吗?
./launcher cleanup
搜索了一下,我找到了这个非常有趣的评论。
为了避免它们,理解为什么会出现中间未标记的镜像并显示为
<none> <none>非常重要,因为正如你所见,如果它们正在被使用,你就无法删除它们。未标记镜像出现的原因是,你构建了一个镜像,然后更改了
Dockerfile并再次构建了该镜像,它重用了上一个构建的一些层。现在你有一个未标记的镜像,由于它的一些层被新版本的该镜像使用,因此无法删除。解决方案是:
- 删除新版本的镜像
- 删除未标记的镜像,然后
- 重新构建新版本的镜像,使其拥有所有层。
你将只剩下一个标记的镜像,其中包含之前未标记镜像和新镜像的所有层。
~jr
我没想到会在一个的docker镜像中找到2.64 GB的内容,所以现在我正在试图弄清楚那里发生了什么。如果我根本不需要这个镜像,那么我们肯定离需要调整大小还有很长的路要走。
你是否执行了
./launcher cleanup
但我建议你调整大小。我很惊讶你能在 25GB 的情况下坚持这么久。
另外,你是否查看了 shared/backups/default
我绝对不会信任 DigitalOcean 的备份作为备份论坛的手段。
多久?我没看到任何提示——我确实知道我乐于运行一个20G的论坛和一个25G的论坛。
在共享目录中,你可能有很多备份数据(可能在 shared/standalone/backups/default 中)。你也可能有一些旧的数据库副本或旧的日志文件。我建议你运行
du -kx / | sort -n | tail -49
或类似的命令。
值得注意的是,你可以通过迁移到更大的实例来节省时间,但会花费更多的金钱。或者你可以做相反的权衡。
这让我有点担心。DO 也许能帮你备份整个系统,但如果是我的话,我会更想知道如何备份 Discourse 以及如何获取安全的本地副本。以及如何清理备份。(万一 DO 删除你的实例和账户,你会希望你的数据能够幸免。)
我们也使用 Discourse 的备份功能,我意识到我们还没有在那里清理旧的备份。
好了,我删除了 Discourse 界面中除最新备份之外的所有备份,并将最新的备份下载到了我的本地驱动器。这样我就离空间不足还有不到 100MB 了。
这是我在 var/discourse 中运行该命令时得到的结果
656876 /var/lib/docker/overlay2/81fd81f27d0d8fe795f510fe8d70c4ecad96405b0e1dbb57f0440fe9c398a30d/diff/var/www/discourse
819624 /var/log/journal/e734ad1931dbee4740881cc15c9e7a9a
826292 /var/discourse/shared/standalone
826296 /var/discourse/shared
831476 /var/lib/docker/overlay2/7bedcd4746ebce6e3fe7bbb5ec2c987a1c046efc715fad1e53201b18b97b6058/diff/home/discourse/.cache/yarn/v6
831484 /var/lib/docker/overlay2/7bedcd4746ebce6e3fe7bbb5ec2c987a1c046efc715fad1e53201b18b97b6058/diff/home/discourse/.cache/yarn
831492 /var/lib/docker/overlay2/7bedcd4746ebce6e3fe7bbb5ec2c987a1c046efc715fad1e53201b18b97b6058/diff/home/discourse/.cache
832188 /var/discourse
845992 /lib/modules
850136 /var/lib/docker/overlay2/7bedcd4746ebce6e3fe7bbb5ec2c987a1c046efc715fad1e53201b18b97b6058/diff/home/discourse
850144 /var/lib/docker/overlay2/7bedcd4746ebce6e3fe7bbb5ec2c987a1c046efc715fad1e53201b18b97b6058/diff/home
898764 /var/lib/docker/overlay2/58e9df9d9e2e10efb3dcf68771edd172664f8d91e3aa2e0b280fd4549bfd2a91/diff/usr/lib
966656 /var/lib/docker/overlay2/21f4d6109bd809c584ae84f9f7c50286c6126176f86a2ef61c4c24ce1e633765/diff/var/www/discourse
966660 /var/lib/docker/overlay2/21f4d6109bd809c584ae84f9f7c50286c6126176f86a2ef61c4c24ce1e633765/diff/var/www
966664 /var/lib/docker/overlay2/21f4d6109bd809c584ae84f9f7c50286c6126176f86a2ef61c4c24ce1e633765/diff/var
991800 /var/lib/docker/overlay2/21f4d6109bd809c584ae84f9f7c50286c6126176f86a2ef61c4c24ce1e633765/diff
991816 /var/lib/docker/overlay2/21f4d6109bd809c584ae84f9f7c50286c6126176f86a2ef61c4c24ce1e633765
994980 /var/lib/docker/overlay2/2749f8a24b3e28af399b256ecab7f2db0cb146939a0ef56e83858a0e696c3df6/diff/usr/lib
1089092 /var/lib/docker/overlay2/9817d45d2728572ad6dc4d62df5944dfad69c35b76753ceb260e0130863ece49/diff/var/www/discourse
1089096 /var/lib/docker/overlay2/9817d45d2728572ad6dc4d62df5944dfad69c35b76753ceb260e0130863ece49/diff/var/www
1130168 /var/lib/docker/overlay2/9817d45d2728572ad6dc4d62df5944dfad69c35b76753ceb260e0130863ece49/diff/var
1177644 /var/lib/docker/overlay2/9817d45d2728572ad6dc4d62df5944dfad69c35b76753ceb260e0130863ece49/diff
1177660 /var/lib/docker/overlay2/9817d45d2728572ad6dc4d62df5944dfad69c35b76753ceb260e0130863ece49
1224436 /var/lib/docker/overlay2/81fd81f27d0d8fe795f510fe8d70c4ecad96405b0e1dbb57f0440fe9c398a30d/diff/var/www/discourse
1224440 /var/lib/docker/overlay2/81fd81f27d0d8fe795f510fe8d70c4ecad96405b0e1dbb57f0440fe9c398a30d/diff/var/www
1224444 /var/lib/docker/overlay2/81fd81f27d0d8fe795f510fe8d70c4ecad96405b0e1dbb57f0440fe9c398a30d/diff/var
1234612 /lib
1248080 /var/lib/docker/overlay2/81fd81f27d0d8fe795f510fe8d70c4ecad96405b0e1dbb57f0440fe9c398a30d/diff
1248096 /var/lib/docker/overlay2/81fd81f27d0d8fe795f510fe8d70c4ecad96405b0e1dbb57f0440fe9c398a30d
1342320 /var/lib/docker/overlay2/58e9df9d9e2e10efb3dcf68771edd172664f8d91e3aa2e0b280fd4549bfd2a91/diff/usr
1516440 /usr
1543656 /var/lib/docker/overlay2/7bedcd4746ebce6e3fe7bbb5ec2c987a1c046efc715fad1e53201b18b97b6058/diff/var/www/discourse
1543664 /var/lib/docker/overlay2/7bedcd4746ebce6e3fe7bbb5ec2c987a1c046efc715fad1e53201b18b97b6058/diff/var/www
1558580 /var/lib/docker/overlay2/7bedcd4746ebce6e3fe7bbb5ec2c987a1c046efc715fad1e53201b18b97b6058/diff/var
1659548 /var/lib/docker/overlay2/58e9df9d9e2e10efb3dcf68771edd172664f8d91e3aa2e0b280fd4549bfd2a91/diff
1659564 /var/lib/docker/overlay2/58e9df9d9e2e10efb3dcf68771edd172664f8d91e3aa2e0b280fd4549bfd2a91
2040472 /var/lib/docker/overlay2/2749f8a24b3e28af399b256ecab7f2db0cb146939a0ef56e83858a0e696c3df6/diff/usr
2171304 /var/log/journal/d893af269dfb5f73239a5b6761d49ea0
2388612 /var/lib/docker/overlay2/2749f8a24b3e28af399b256ecab7f2db0cb146939a0ef56e83858a0e696c3df6/diff
2388628 /var/lib/docker/overlay2/2749f8a24b3e28af399b256ecab7f2db0cb146939a0ef56e83858a0e696c3df6
2461904 /var/lib/docker/overlay2/7bedcd4746ebce6e3fe7bbb5ec2c987a1c046efc715fad1e53201b18b97b6058/diff
2461924 /var/lib/docker/overlay2/7bedcd4746ebce6e3fe7bbb5ec2c987a1c046efc715fad1e53201b18b97b6058
3064672 /var/log/journal
3276268 /var/log
10107180 /var/lib/docker/overlay2
10131984 /var/lib/docker
10396840 /var/lib
14869684 /var
20007992 /
我收到了关于如何处理以下内容的附加说明:
详细信息如下:
1
删除镜像的命令是:
docker rmi {image_name}其中
{image_name}是你要删除的镜像的名称。你也可以使用镜像 ID 来删除镜像(例如docker rmi {image_id})。这就是你需要用来删除名称为<none>的镜像的方法。例如,假设你有以下镜像:
REPOSITORY TAG IMAGE ID CREATED SIZE my-new-image latest c18f86ab8daa 12 seconds ago 393MB <none> <none> b1ee72ab84ae About a minute ago 393MB my-image latest f5a5f24881c3 2 minutes ago 393MB无法删除
<none>镜像的原因可能是my-new-image正在使用它的某些层。你需要做的是:docker rmi my-new-image:latest docker rmi b1ee72ab84ae docker built -t my-new-image .这会删除正在重用
<none>镜像的层的my-new-image:latest。然后它使用镜像 IDb1ee72ab84ae删除<none>镜像。最后,它会重新构建my-new-image,创建所有需要的层。还要检查以确保没有停止的容器仍在使
<none>“未标记”镜像。使用docker ps -a查看所有镜像,包括已退出的镜像。如果是这样,请使用docker rm {container_id}删除容器,然后再次尝试删除<none>镜像。
大家觉得怎么样?
我认为你可以在这里改进:
看看这个早期的交流:
和
这解决了问题,我也更改了策略!
我仍然想找出那个 <none> 镜像的问题(因为它占用了 2GB+ 的空间,这太离谱了),但你已经解决了我的燃眉之急,为我腾出了升级所需的空间!谢谢你!!
确实如此!就目前而言,我乐在其中,学习新东西,所以时间是值得的。