نفذت المساحة - هل صورة Docker كبيرة؟

مرحباً، أدير منتدى صغيراً مستضافاً ذاتياً على خادم سحابي بسعة 25 جيجابايت يعمل بنظام Debian 13. كنت أحاول التحديث إلى الإصدار 2026.6.0-latest باستخدام الأمر ./launcher rebuild app، لكن التحديث ألغي بسبب عدم توفر مساحة كافية على القرص. اتبعت التلميح لتنظيف صور Docker، لكن ذلك لم يُجدِ نفعاً. يتبقى لدي 3.9 جيجابايت فقط. تبلغ مساحة الملفات المرفوعة في المنتدى 138 ميجابايت، بينما تبلغ مساحة النسخ الاحتياطية 448 ميجابايت. خادمي نظيف تماماً باستثناء تثبيت Discourse، ولم أقم بأي شيء آخر عليه.

بعد البحث باستخدام أمر du، اكتشفت أن المجلد /var/lib/containerd يستهلك 13 جيجابايت، بينما يستهلك /var/docker 5.1 جيجابايت. هل من الطبيعي أن تستهلك هذه المجلدات مساحة بهذا الحجم؟ هل هناك شيء يمكنني فعله حيال ذلك؟

إذا كان ذلك طبيعياً، فأتوقع أن عليّ فقط دفع تكلفة مساحة تخزين إضافية. أردت فقط التأكد قبل تحمل هذه التكلفة الإضافية. شكراً!

همم… هل جربت ./launcher cleanup؟

من الجدير إجراء تنظيف. يرجى نشر تفاصيل ما حدث. إليك مثال على ما قمت به مرة واحدة:

root@ubuntu-2gb-nbg1-1:/var/discourse# df -h /
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        19G   12G  6.5G  65% /

root@ubuntu-2gb-nbg1-1:/var/discourse# ./launcher cleanup
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B

WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y

Deleted Images:
deleted: sha256:33ce56b3484175342191a344fe1aa9f330431de7bf6f0f0e14f75c5bd851a5b0
deleted: sha256:5e04a0411f813e8f2c1a50d84a7d7bb1b17a855ce041730cf8e3b2fb90144b19
untagged: discourse/base:2.0.20200512-1735
untagged: discourse/base@sha256:7f6c5be23a8e4237cecafaca9d041de5964f8237345b7b183cebdee1f73ed024
deleted: sha256:991acdba0b1f18141192f8682bc5ec1c3365dff0d4fa1c6504e6ce0e3ae6dd76
deleted: sha256:e1c41c8dbd697ae0a61ca612c61f085f69f5bf74c4269cf5c68b4de0fec723fa
deleted: sha256:c2adabaecedbda0af72b153c6499a0555f3a769d52370469d8f6bd6328af9b13
untagged: discourse/base:2.0.20200724-1815
untagged: discourse/base@sha256:1d5eb2f8eae84203b28d3c643648d0dd7d213c2055865cfa5132e30db9e365d5

Total reclaimed space: 2.591GB

# df -h /
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        19G  8.7G  9.3G  49% /

من الجدير أيضًا إلقاء نظرة مفصلة على استخدام القرص ونشرها هنا! انظر على سبيل المثال

إذا كان لديك أي نسخ احتياطية على النظام، فيجب عليك تنزيلها واختبارها وحذف جميع النسخ ما عدا الأحدث. إذا كنت تحت ضغط شديد، احذف الأحدث أيضًا. (في حالتي، أتأكد من أن النسخة التي قمت بتنزيلها محمية أيضًا بنسخي الاحتياطي الشخصي خارج الموقع أولاً. احتفظ دائمًا بنسختين على الأقل.)

بصرف النظر عن du، الذي يجيب على الأسئلة على مستوى نظام التشغيل، يمكنك طرح أسئلة على مستوى Docker. يرجى نشر نتائجك المفصلة!

# docker volume ls -qf dangling=true
# docker images -a

من الصعب إدارة استخدام القرص على مثانة بحجم 25 جيجابايت - لقد فعلت ذلك لفترة طويلة، مستخدمًا الوقت والاستفادة من خبرة مسؤول النظام. في النهاية، غيرت المزود، ودفع أقل وحصلت على 40 جيجابايت وكان ذلك أفضل بكثير.

انظر أيضًا سابقًا
Discourse upgrade fails due to insufficient disk space on 25G droplet

هذا مفيد جدًا، شكرًا لك.

قبل أن أجرب cleanup، هل يوفر Discourse طريقة للتحقق من سلامة النسخ الاحتياطي دون استعادته؟

نتيجة الأمر du -hx / | sort -h | tail -49 (لقد وجدت أن استخدام -h يجعل من السهل عليّ تحليل النتائج):

833M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/42/fs/var/www/discourse/vendor/bundle/ruby
833M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/42/fs/var/www/discourse/vendor/bundle/ruby/3.4.0
837M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/283/fs/var
837M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/283/fs/var/www
837M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/283/fs/var/www/discourse
837M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/283/fs/var/www/discourse/vendor
837M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/283/fs/var/www/discourse/vendor/bundle
837M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/283/fs/var/www/discourse/vendor/bundle/ruby
837M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/283/fs/var/www/discourse/vendor/bundle/ruby/3.4.0
839M	/var/discourse/shared
839M	/var/discourse/shared/standalone
840M	/var/discourse
863M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/42
863M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/42/fs
868M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/283
868M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/283/fs
874M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/284
874M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/284/fs
874M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/43
874M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/43/fs
908M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/263/fs/usr
925M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/22/fs/usr
944M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/263
944M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/263/fs
961M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/22
961M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/22/fs
1.3G	/usr
1.4G	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/251
1.4G	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/251/fs
1.4G	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/251/fs/var
1.4G	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/251/fs/var/www
1.4G	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/251/fs/var/www/discourse
1.5G	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/227/fs/var
1.5G	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/227/fs/var/www
1.5G	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/227/fs/var/www/discourse
1.6G	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/227
1.6G	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/227/fs
2.5G	/var/log
2.5G	/var/log/journal
2.5G	/var/log/journal/1d9299c9656046d6bd0e18d4a09c183c
2.7G	/var/lib/containerd/io.containerd.content.v1.content
2.7G	/var/lib/containerd/io.containerd.content.v1.content/blobs
2.7G	/var/lib/containerd/io.containerd.content.v1.content/blobs/sha256
9.8G	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs
9.8G	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots
13G	/var/lib
13G	/var/lib/containerd
17G	/var
20G	/

كانت نتيجة الأمر docker volume ls -qf dangling=true فارغة. في الواقع، فإن docker volume ls فارغ أيضًا.

docker images -a:

IMAGE                              ID             DISK USAGE   CONTENT SIZE   EXTRA
discourse/base:2.0.20260209-1300   50d2dae489a9       4.77GB         1.12GB        
discourse/base:2.0.20260521-0047   27373b823bbe       4.89GB         1.17GB        
local_discourse/app:latest         01527763be8d        6.9GB         1.63GB    U   

أنا أعرف القليل جدًا عن Docker لتشخيص هذه المخرجات، لكن /var/log/ يبدو كبيرًا بعض الشيء إذا كان يحتوي فقط على السجلات، ومن المثير للاهتمام وجود 3 صور بينما لدي منتدى واحد فقط يعمل (ربما يكون هذا متوقعًا تمامًا).

أقدر ملاحظتك حول الحاجة إلى مساحة تخزين أكبر. سأقوم على الأرجح بتوسيع المساحة، لكن هذه تجربة تعليمية جيدة قبل أن أفعل ذلك.

يمكنك توفير بعض المساحة بإعادة تكوين التسجيل:

لم أفهم أبدًا إدارة حاويات Docker حقًا. في بعض الأحيان تساعد عملية التنظيف. لقد شغلت هذه الأوامر للتو:

# cd /var/discourse/
# df -h /
نظام الملفات      الحجم  المستخدم المتاح النسبة% المثبت على
/dev/sda1        38 جيجابايت  24 جيجابايت  13 جيجابايت 67% /
# docker images -a
                                                                                             i معلومات →   U قيد الاستخدام
الصورة                              المعرف            استخدام القرص   حجم المحتوى   إضافي
discourse/base:2.0.20260209-1300   18ccefc73392        3.1 جيجابايت             0 بايت        
local_discourse/app:latest         810ac5579584       4.57 جيجابايت             0 بايت    U   
<غير مسمى>                         d303cfc49c99       4.37 جيجابايت             0 بايت        
<غير مسمى>                         a9d03385c205       4.34 جيجابايت             0 بايت        
# ./launcher cleanup
تحذير! سيؤدي هذا إلى إزالة جميع الحاويات المتوقفة.
هل أنت متأكد من أنك تريد المتابعة؟ [y/N] y
إجمالي المساحة المستعادة: 0 بايت
تحذير! سيؤدي هذا إلى إزالة جميع الصور التي لا ترتبط بها حاوية واحدة على الأقل.
هل أنت متأكد من أنك تريد المتابعة؟ [y/N] y
تم حذف الصور:
تم الحذف: sha256:d303cfc49c992b7fa0b0da65e38f3de79312c6e42eb99e5fd7b27bf4e237ab1d
تم الحذف: sha256:829057c668fd2bd0f7b863c2589e5c3c27364285b39d6df31d38eb208e6410df
غير مسمى: discourse/base:2.0.20260209-1300
غير مسمى: discourse/base@sha256:50d2dae489a9c9916c3d50d880f7f1282fcbe179339b60a8947ab135c1f1f9bf
تم الحذف: sha256:a9d03385c205f740e5f02db0c665a83688f7194d5386bd2d01772b8b5cd5dc65
تم الحذف: sha256:70ec1b4b6cab7365b5f56b8187ef7631e6906fe13b5d3a2b1e39d3457d14514c

إجمالي المساحة المستعادة: 2.517 جيجابايت
# docker images -a
                                                                                             i معلومات →   U قيد الاستخدام
الصورة                        المعرف            استخدام القرص   حجم المحتوى   إضافي
local_discourse/app:latest   810ac5579584       4.57 جيجابايت             0 بايت    U   
<غير مسمى>                   18ccefc73392        3.1 جيجابايت             0 بايت        
# df -h /
نظام الملفات      الحجم  المستخدم المتاح النسبة% المثبت على
/dev/sda1        38 جيجابايت  21 جيجابايت  15 جيجابايت 59% /

مخرجات أمر ./launcher cleanup:

تحذير! سيؤدي هذا إلى إزالة جميع الحاويات المتوقفة.
هل أنت متأكد من رغبتك في المتابعة؟ [y/N] y
إجمالي المساحة المستردة: 0 بايت
تحذير! سيؤدي هذا إلى إزالة جميع الصور التي لا ترتبط بها حاوية واحدة على الأقل.
هل أنت متأكد من رغبتك في المتابعة؟ [y/N] y
الصور المحذوفة:
غير مُصنَّفة: discourse/base:2.0.20260209-1300
محذوف: sha256:50d2dae489a9c9916c3d50d880f7f1282fcbe179339b60a8947ab135c1f1f9bf
محذوف: sha256:1bb6f08ca8363e7e002eaf8bafc76b7742d8baa429f816cde77d3d38d234c98a
محذوف: sha256:07596c600885cf3f0647c4b41959c5631328ee37af14913b9f2b1b1771ad4f45
غير مُصنَّفة: discourse/base:2.0.20260521-0047
محذوف: sha256:27373b823bbeca526dd006cefe1c58e7eeca1e5670ab6e619fcd2138f7d50420
محذوف: sha256:ab90467600edc09bae8ac2f43420b7c771f87d357aa15646cd40025ec0774fda
محذوف: sha256:053438a5cf1727f724f96a4d7af0b135929f633afd8ee05edcddeaf99232b636

إجمالي المساحة المستردة: 1.17 جيجابايت

لكن هذا غريب: فقد انتقل منتدي Discourse للتو من الإبلاغ عن 3.9 جيجابايت فارغة إلى 8.5 جيجابايت فارغة. إذا قمت بتشغيل أمر du -hx / | sort -h | tail -49 مرة أخرى، يمكنك المقارنة مع نتائجي السابقة، وقد تقلص /var/lib بمقدار 8 جيجابايت:

628 ميجابايت	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/227/fs/var/www/discourse/vendor/bundle/ruby
628 ميجابايت	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/227/fs/var/www/discourse/vendor/bundle/ruby/3.4.0
629 ميجابايت	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/227/fs/var/www/discourse/vendor
733 ميجابايت	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/42/fs/var/www/discourse/vendor/bundle/ruby/3.4.0/gems
792 ميجابايت	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/43/fs/var/www/discourse/node_modules/.pnpm
793 ميجابايت	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/43/fs/var/www/discourse/node_modules
794 ميجابايت	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/43/fs/var
794 ميجابايت	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/43/fs/var/www
794 ميجابايت	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/43/fs/var/www/discourse
833 ميجابايت	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/42/fs/var
833 ميجابايت	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/42/fs/var/www
833 ميجابايت	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/42/fs/var/www/discourse
833 ميجابايت	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/42/fs/var/www/discourse/vendor
833 ميجابايت	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/42/fs/var/www/discourse/vendor/bundle
833 ميجابايت	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/42/fs/var/www/discourse/vendor/bundle/ruby
833 ميجابايت	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/42/fs/var/www/discourse/vendor/bundle/ruby/3.4.0
839 ميجابايت	/var/discourse/shared
839 ميجابايت	/var/discourse/shared/standalone
841 ميجابايت	/var/discourse
863 ميجابايت	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/42
863 ميجابايت	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/42/fs
874 ميجابايت	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/43
874 ميجابايت	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/43/fs
925 ميجابايت	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/22/fs/usr
961 ميجابايت	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/22
961 ميجابايت	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/22/fs
1.3 جيجابايت	/usr
1.4 جيجابايت	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/251
1.4 جيجابايت	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/251/fs
1.4 جيجابايت	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/251/fs/var
1.4 جيجابايت	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/251/fs/var/www
1.4 جيجابايت	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/251/fs/var/www/discourse
1.5 جيجابايت	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/227/fs/var
1.5 جيجابايت	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/227/fs/var/www
1.5 جيجابايت	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/227/fs/var/www/discourse
1.6 جيجابايت	/var/lib/containerd/io.containerd.content.v1.content
1.6 جيجابايت	/var/lib/containerd/io.containerd.content.v1.content/blobs
1.6 جيجابايت	/var/lib/containerd/io.containerd.content.v1.content/blobs/sha256
1.6 جيجابايت	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/227
1.6 جيجابايت	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/227/fs
2.5 جيجابايت	/var/log
2.5 جيجابايت	/var/log/journal
2.5 جيجابايت	/var/log/journal/1d9299c9656046d6bd0e18d4a09c183c
6.4 جيجابايت	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs
6.4 جيجابايت	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots
7.9 جيجابايت	/var/lib/containerd
8.0 جيجابايت	/var/lib
12 جيجابايت	/var
15 جيجابايت	/

ويبدو أن أمر docker images -a مختلف بشكل ملحوظ:

الصورة                        المعرف             استهلاك القرص   حجم المحتوى   إضافي
local_discourse/app:latest   01527763be8d        6.9 جيجابايت         1.63 جيجابايت    U   

يبدو أن أمر ./launcher cleanup يقلل من تقدير مقدار المساحة المستردة؟

يجب أن أكون أملك مساحة كافية لإجراء تحديث الآن. يبدو أن تشغيل cleanup بعد التحديث عادة جيدة يجب اتباعها.

شكرًا على المساعدة!

لقد قمت للتو بتنظيف صورتين أساسيتين، تاركًا الصورة المُنشأة محليًا.

هل صور القاعدة مجرد بقايا من عملية التثبيت الأصلية؟ أم يتم تنزيلها أيضًا أثناء rebuild app؟

نعم. يتم تنزيل أحدث صورة في حال عدم وجودها، وستقوم ببناء صورتك المحلية انطلاقًا منها.

لا أستطيع التفكير في سبب قد يدفعك للاحتفاظ بأكثر من صورة أساس واحدة…