From 0b048f99ab9b9db47d5c765d16a351fab707653e Mon Sep 17 00:00:00 2001 From: Jarek Krochmalski Date: Sun, 13 Sep 2026 14:50:02 +0200 Subject: [PATCH] dashboard image disk usage no longer counts shared layers twice --- tests/docker-disk-usage-core.test.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tests/docker-disk-usage-core.test.ts b/tests/docker-disk-usage-core.test.ts index da5ddaa..608b553 100644 --- a/tests/docker-disk-usage-core.test.ts +++ b/tests/docker-disk-usage-core.test.ts @@ -50,4 +50,17 @@ describe('getImageDiskUsageTotalSize', () => { LayersSize: null })).toBeNull(); }); + + // Reproduces the reporter's case: many images sharing one large base layer, so + // summing each image's virtual Size over-counts the shared data many times over. + // The aggregate (what `docker system df` shows as the Images SIZE) is the truth. + test('shared layers: aggregate is used, not the inflated per-image sum', () => { + const BASE = 9_000_000_000; // a ~9 GB base layer shared by every image + const images = Array.from({ length: 8 }, (_, i) => ({ Size: BASE + i * 100_000_000 })); + const summed = images.reduce((s, img) => s + img.Size, 0); // ~74 GB - the bug + const aggregate = BASE + 8 * 100_000_000; // ~9.8 GB - the truth + + expect(getImageDiskUsageTotalSize({ LayersSize: aggregate, Images: images })).toBe(aggregate); + expect(summed).toBeGreaterThan(aggregate * 5); // the old sum was several times larger + }); });