Reclaim Disk Space by Cleaning Up /var/lib/docker/overlay2
Learn how to safely reclaim disk space on your Docker host when /var/lib/docker/overlay2 grows large, using supported cleanup commands and careful troubleshooting.
Do not delete overlay2 folders manually
Avoid deleting anything inside /var/lib/docker/overlay2 by hand. Manual deletion can corrupt Docker’s metadata and break running containers/images. Use the supported Docker cleanup commands in this guide, and only take “reset Docker data dir” actions if you fully understand the impact.
The /var/lib/docker/overlay2 directory is where Docker (using the overlay2 storage driver) stores the filesystem layers and runtime data for images and containers. Over time it can grow significantly—especially if you build images frequently, pull many tags, or leave stopped containers around. When it fills the disk, it can cause Docker failures and broader system issues.
What you have in /var/lib/docker/overlay2
overlay2 is Docker’s copy-on-write filesystem implementation on Linux. The overlay2 directory contains:
- Layer directories: content-addressed directories that hold the actual layer filesystem diffs.
- Container “upperdir” data: writable layers for containers (this is often what grows when containers write lots of data).
- Metadata / linkage: helper structures used by Docker to map layers to images and containers.
Folder names are not meant to be human-friendly identifiers, and a 1:1 “folder == image” mapping is not reliable. The only safe way to understand what’s consuming space is using Docker commands (and supported tools) rather than deleting directories directly.
Reasons for /var/lib/docker/overlay2 using a lot of space
There are several reasons why the /var/lib/docker/overlay2 directory can grow large:
-
Unused Images and Containers: When you build or pull Docker images, or create and stop containers, their layers are stored in the
/var/lib/docker/overlay2directory. If you don’t remove these unused images and containers, they will continue to occupy disk space. -
Cached Layers: Docker caches image layers to speed up the build and deployment process. However, these cached layers can accumulate over time, consuming disk space.
-
Large Images and Containers: Some Docker images and containers can be quite large, especially if they include large application binaries, libraries, or data files.
-
Inefficient Image Layers: If Docker images are not built efficiently, with unnecessary files or layers, they can consume more disk space than necessary.
In case you are interested to monitor server resources like CPU, memory, disk space you can check: How To Monitor Server and Docker Resources
Check the space used
Start with Docker’s own view of disk usage:
docker system df
docker system df -v
This shows how much space is used by images, containers, volumes, and build cache (and with -v, it’s more detailed).
Then check the raw on-disk usage for overlay2:
du -sh /var/lib/docker/overlay2
If you need to see the largest directories (useful as a clue, not a deletion target):
du -sh /var/lib/docker/overlay2/* 2>/dev/null | sort -hr | head -10
Important notes:
- Large
overlay2directories are often caused by container writable layers (apps writing into the container filesystem) or build cache, not only “unused images”. - Knowing “which IDs are large” is less actionable than knowing whether the growth is from images, containers, volumes, or build cache—that’s why
docker system df -vis the recommended first step.
Cleanup /var/lib/docker/overlay2
1) Quick win: remove unused Docker objects
This is the safest and most common cleanup sequence. Start with a read-only report:
docker system df -v
Then remove unused objects.
Remove stopped containers, unused networks, dangling images, and build cache:
docker system prune -f
If you also want to remove all images not currently used by a container (more aggressive):
docker system prune -a -f
If you want to reclaim unused volumes (be careful: volumes can hold important data):
docker volume prune -f
If you are running BuildKit builds, build cache can be the biggest contributor; prune it explicitly:
docker builder prune -f
docker builder prune -a -f
2) Identify “what” is growing (containers vs images vs volumes vs cache)
A large overlay2 directory is often caused by container writes (data being written inside containers) or build cache, not only “unused images”.
- If
docker system df -vshows large Local Volumes usage, focus on volumes first. - If it shows large Build Cache usage, prefer
docker builder prune. - If it shows large Containers usage, check for containers that are writing into their writable layers.
3) Map overlay2 usage to Docker objects (advanced)
I’ve created a utility script that helps visualize overlay2 disk usage:
curl -sSL https://utils.bitdoze.com/scripts/docker-overlay2-view.sh | bash
All scripts can be found under: https://utils.bitdoze.com/
Note: this mapping is best-effort. overlay2 is an internal structure, and not every directory has a clean “this belongs to image X” relationship. Use this output as guidance for what to investigate via Docker commands, not as a list of directories to delete.
3.6G Image ID: N/A Image Name: N/A Subfolder: /var/lib/docker/overlay2/b5b5b1b4abef270dbc91bdd6c385865d778b6bd8ee9568030635994a296533ab
2.5G Image ID: 2e7228c0315e Image Name: flowiseai/flowise:latest Subfolder: /var/lib/docker/overlay2/89048c0675f730b36077f7b967754ec94efead1d7d45b35870131f72bf412ff3
559M Image ID: 2e7228c0315e Image Name: flowiseai/flowise:latest Subfolder: /var/lib/docker/overlay2/ac6efc422ab6e481c58b22d13e6d636d0c649bf58b0ef1bd2d9e01a01c5cbd8c
610M Image ID: N/A Image Name: N/A Subfolder: /var/lib/docker/overlay2/dc123594104a9a124bfb4def0780c9e2e65205abf366ea37128663cc7020e444
512M Image ID: N/A Image Name: N/A Subfolder: /var/lib/docker/overlay2/4052cb983b6bb7bbe28a6dff67fd1833eb87d4ee9a606b26d925c50e7a823b31
507M Image ID: N/A Image Name: N/A Subfolder: /var/lib/docker/overlay2/8cf368abcb835aff6cb6c19cc7b630a32fd5cf23698f9b0fc93a9ed738708a7d
441M Image ID: N/A Image Name: N/A Subfolder: /var/lib/docker/overlay2/c6f5534c7692f17026ec630ed076f051914367334916e8bc1a7ee8b9ea3c8da6
271M Image ID: 2e7228c0315e Image Name: flowiseai/flowise:latest Subfolder: /var/lib/docker/overlay2/a7384d24b3ef895b797fe5b65ae365b34e0aedff7544de5e90780ff202cddc03
241M Image ID: N/A Image Name: N/A Subfolder: /var/lib/docker/overlay2/78226c49fc485223aa093120075cf760af3ff184952eb3f10819652981cf5124
233M Image ID: 9a510ccf1de4 Image Name: postgres:16-alpine Subfolder: /var/lib/docker/overlay2/84ccf08125081b2cf089de802a25923b776ab2c4fbaa760c570223fb784b22ec
196M Image ID: 81bab60b840e Image Name: netdata/netdata:edge Subfolder: /var/lib/docker/overlay2/264e56fd84b5c0c899a502ad3e0e4944f041390b29af3cdb6396e9f4989d1b41
180M Image ID: 89c919b22c13 Image Name: zauberzeug/nicegui:latest Subfolder: /var/lib/docker/overlay2/a5f9492730e056c8b4e687dea92944d36d3b12f50a7112a51e1a9d804eb21345
162M Image ID: N/A Image Name: N/A Subfolder: /var/lib/docker/overlay2/2de288641807d7f4146a579b42d93c62dfa5b539a9a41628592aefbb16dffb20
166M Image ID: ffb6864bc6f8 Image Name: louislam/dockge:1 Subfolder: /var/lib/docker/overlay2/70732a3ddee8da21207391465d25e6d1980319dd594f4eac890c249a9ee5d271
156M Image ID: ffb6864bc6f8 Image Name: louislam/dockge:1 Subfolder: /var/lib/docker/overlay2/28de4368b82e98c7bef746a5a31fe4bfafad13580552840164e4f7f57f49f607
212M Image ID: b23ac695b1b4 Image Name: louislam/uptime-kuma:1 Subfolder: /var/lib/docker/overlay2/7d2dab81fd1f423b10620e080d82c29f5ce1f8ddcef73f3c60ab70704af4c41b
121M Image ID: 81bab60b840e Image Name: netdata/netdata:edge Subfolder: /var/lib/docker/overlay2/54cae94407a6d824b0d6a5254e2c53a0e43dd824b7908cb2be30566dd0b2fd87
127M Image ID: 81bab60b840e Image Name: netdata/netdata:edge Subfolder: /var/lib/docker/overlay2/616d0c25253ba7eccbd94a0b34e0bb78d3f72c5149d35584aba21330f9fe8465
114M Image ID: a7079537d060 Image Name: harness/gitness:3.0.0-beta.5 Subfolder: /var/lib/docker/overlay2/eb7adfcd18fee985e866fb66c2ceda1a70dd5b5b923012c11d772dc5bf42b012
118M Image ID: 2e7228c0315e Image Name: flowiseai/flowise:latest Subfolder: /var/lib/docker/overlay2/bcc513179de454299c4dc84463d3dec4dc70ddb1dee9bb179b39e76e7ad9070a
116M Image ID: b23ac695b1b4 Image Name: louislam/uptime-kuma:1 Subfolder: /var/lib/docker/overlay2/4dcda8262d4dcddea3460b0cc8352136699b49fde2e43dcbfc888979f3cdb24d
89M Image ID: ffb6864bc6f8 Image Name: louislam/dockge:1 Subfolder: /var/lib/docker/overlay2/c719f12c5c660788646618912cafe8f9511dff366e88571d7b39ce36e4249b2c
91M Image ID: 2e7228c0315e Image Name: flowiseai/flowise:latest Subfolder: /var/lib/docker/overlay2/a9a75fc152f24f5dcb849d735594a42c71c15a72250213cc04691cd6848bca42
88M Image ID: 89c919b22c13 Image Name: zauberzeug/nicegui:latest Subfolder: /var/lib/docker/overlay2/836a250971cab36b72e36bcabc4f2b48e4c1054c26830d7306b795cac3e337fb
108M Image ID: ffb6864bc6f8 Image Name: louislam/dockge:1 Subfolder: /var/lib/docker/overlay2/24bf466ef126eabfdf0e67c297462938fe27dafdc89ea24aabeff793ef946dda
82M Image ID: ffb6864bc6f8 Image Name: louislam/dockge:1 Subfolder: /var/lib/docker/overlay2/7a7a28d3b59658445437522404eee89ad0a709fda04b1a29be4726353c972dec
76M Image ID: b23ac695b1b4 Image Name: louislam/uptime-kuma:1 Subfolder: /var/lib/docker/overlay2/b2a9be0ddbf6cf6f43cc14bc22c3406f177a6cd600d8eb479228d6e21b02f93a
68M Image ID: 81bab60b840e Image Name: netdata/netdata:edge Subfolder: /var/lib/docker/overlay2/56c96ee45c9d6b69bea4befa4de6399f64e43cc59f1a098e91cbb4415eb3b995
66M Image ID: b23ac695b1b4 Image Name: louislam/uptime-kuma:1 Subfolder: /var/lib/docker/overlay2/c3a6596644eef9684bac2754082775f4a22ab092699e57f69a119f1f81db2089
46M Image ID: N/A Image Name: N/A Subfolder: /var/lib/docker/overlay2/a2b95f146415f89c5be49ae361164466e06c8f572a89fb1f3bd3ee8c14109f3c
41M Image ID: a7079537d060 Image Name: harness/gitness:3.0.0-beta.5 Subfolder: /var/lib/docker/overlay2/7ec53d7dcaa0bdef829064006eb7cd1707e5bc81329e2bcc4ca098435f7e35ea
36M Image ID: b23ac695b1b4 Image Name: louislam/uptime-kuma:1 Subfolder: /var/lib/docker/overlay2/169678de43422c93d84d7908bd8ffb7bc29f24c66a874a7d8dc8b6134b9b23a0
34M Image ID: 89c919b22c13 Image Name: zauberzeug/nicegui:latest Subfolder: /var/lib/docker/overlay2/deb7a08befba79a1da771c1fe01b25769af5b726b119739daed14c0ab6e0443f
15M Image ID: 53f011320bac Image Name: filebrowser/filebrowser:v2-s6 Subfolder: /var/lib/docker/overlay2/17584cae6292ae28147159436ba7d81ce25f633b51d1d1931c63f3ba4290a86a
13M Image ID: N/A Image Name: N/A Subfolder: /var/lib/docker/overlay2/f26a189443b56e2bd58d4b29127cf27e56ce40792786c3f96f59c7236762832b
13M Image ID: 5e183bda51e6 Image Name: amir20/dozzle:latest Subfolder: /var/lib/docker/overlay2/19f6568f4e859b471da14ef3be4a22fd1a944d02ddf0c4e7e6e51f4841ea4696
14M Image ID: 53f011320bac Image Name: filebrowser/filebrowser:v2-s6 Subfolder: /var/lib/docker/overlay2/09edad670708d284424a65b8ede770ede084ccb4e093ce5a68f34aeebc6806ef
14M Image ID: 89c919b22c13 Image Name: zauberzeug/nicegui:latest Subfolder: /var/lib/docker/overlay2/f7071dc2fa0b9ceafccf8c7c4f2a649cf2afd45db3fad514390fcdd070f8de91
15M Image ID: 53f011320bac Image Name: filebrowser/filebrowser:v2-s6 Subfolder: /var/lib/docker/overlay2/3d3109e52bf7eca7bee228781ddd25c1bbe5a7f71629b79e9c017718e8569490
12M Image ID: 2e7228c0315e Image Name: flowiseai/flowise:latest Subfolder: /var/lib/docker/overlay2/2c4b6fc84bd70116a94140c2244c48818b620a8169563c1063a55670fbab3f85
9.3M Image ID: ffb6864bc6f8 Image Name: louislam/dockge:1 Subfolder: /var/lib/docker/overlay2/e581648a5e94b4cbcc465c5bfa959297e28b3393134b43c90a55ab431804e5dd
9.2M Image ID: b23ac695b1b4 Image Name: louislam/uptime-kuma:1 Subfolder: /var/lib/docker/overlay2/4a012de19c527f3e720e0865a78997e41e048a81aa2172ca580d5f72ec017451
7.6M Image ID: 2e7228c0315e Image Name: flowiseai/flowise:latest Subfolder: /var/lib/docker/overlay2/088898d60221b6b9287044663d3eaad6c2e35e0a945ba7041cd197311bb134cf
7.7M Image ID: 9a510ccf1de4 Image Name: postgres:16-alpine Subfolder: /var/lib/docker/overlay2/dee1cc2f27a0fc622000bc9dadfde261c597c738aee05c4bd5f420eb89bb5521
7.7M Image ID: 2e7228c0315e Image Name: flowiseai/flowise:latest Subfolder: /var/lib/docker/overlay2/dee1cc2f27a0fc622000bc9dadfde261c597c738aee05c4bd5f420eb89bb5521
7.7M Image ID: a7079537d060 Image Name: harness/gitness:3.0.0-beta.5 Subfolder: /var/lib/docker/overlay2/737eb00b7ac618fe27f498f4738402115d0f62c130a3e8e5673275bc03dda87a
6.7M Image ID: ffb6864bc6f8 Image Name: louislam/dockge:1 Subfolder: /var/lib/docker/overlay2/f66e314738c63153f7d5fe979454b07861f5fe49df645656079bf959d386e30d
4.0M Image ID: 89c919b22c13 Image Name: zauberzeug/nicegui:latest Subfolder: /var/lib/docker/overlay2/f4cf434f5995eae8c53d7745ddae7961411a462543af09d43891fb5d11447fb5
2.8M Image ID: 53f011320bac Image Name: filebrowser/filebrowser:v2-s6 Subfolder: /var/lib/docker/overlay2/8b150f3d7ebc35c34f8dcacf5cca156b121d966c76668b591834686b26397e31
2.7M Image ID: 89c919b22c13 Image Name: zauberzeug/nicegui:latest Subfolder: /var/lib/docker/overlay2/c179768305fafe34e3217c421e93606341f2af6b33d1bdb73bf7441da9210ccd
1.6M Image ID: 89c919b22c13 Image Name: zauberzeug/nicegui:latest Subfolder: /var/lib/docker/overlay2/a721bb296ea20c16f958c075c9b679308dbcc2654f4c50db03384e6d709942c0
412K Image ID: b23ac695b1b4 Image Name: louislam/uptime-kuma:1 Subfolder: /var/lib/docker/overlay2/7508c8e0187a5e6dfb9de3a6af7f5bbe06e7ba5cf8e8d76d011569b17603b2f8
244K Image ID: a7079537d060 Image Name: harness/gitness:3.0.0-beta.5 Subfolder: /var/lib/docker/overlay2/b535a986525ba548407bf1018dfbdd5c4d9a9541a43bc8d5eaeee2186253d385
244K Image ID: 5e183bda51e6 Image Name: amir20/dozzle:latest Subfolder: /var/lib/docker/overlay2/1fb78bfe25036ef4d4a3c4f12e53b403752ca85db3c47a5d729aed2cb3e4fa2b
288K Image ID: 53f011320bac Image Name: filebrowser/filebrowser:v2-s6 Subfolder: /var/lib/docker/overlay2/c527a8de51fb12b2097c6ef772447853efaa78c2b4407ac84bc675bc8e3c599b
100K Image ID: 9a510ccf1de4 Image Name: postgres:16-alpine Subfolder: /var/lib/docker/overlay2/e4c8d32b00fafea8c6c4cd514fc3b85d4bb7243227e0bd3b63281995b1407423
48K Image ID: N/A Image Name: N/A Subfolder: /var/lib/docker/overlay2/f26a189443b56e2bd58d4b29127cf27e56ce40792786c3f96f59c7236762832b-init
52K Image ID: 9a510ccf1de4 Image Name: postgres:16-alpine Subfolder: /var/lib/docker/overlay2/f64973cf2ec7c3b32a85d96d797d7948dd1a41313bc4d28134b1b5c43511cd4e
44K Image ID: 53f011320bac Image Name: filebrowser/filebrowser:v2-s6 Subfolder: /var/lib/docker/overlay2/947da6241e914cf8a2fdf3303cfb954a4baa4bf7eab56c1a81252ff44b877d21
84K Image ID: ffb6864bc6f8 Image Name: louislam/dockge:1 Subfolder: /var/lib/docker/overlay2/22377e49347f85a438e9f49b410464809c62af69e7ce4ab93eea505f80f27fd9
52K Image ID: 53f011320bac Image Name: filebrowser/filebrowser:v2-s6 Subfolder: /var/lib/docker/overlay2/ea1ac89b01a118204f867706c2f5b742c58f78baed0572baadb6f770aa0c4798
60K Image ID: 9a510ccf1de4 Image Name: postgres:16-alpine Subfolder: /var/lib/docker/overlay2/886f61fcef063b23a687b4e75474e4fdce608262e7f4736f02b6346a6b6ce01d
40K Image ID: N/A Image Name: N/A Subfolder: /var/lib/docker/overlay2/4052cb983b6bb7bbe28a6dff67fd1833eb87d4ee9a606b26d925c50e7a823b31-init
40K Image ID: N/A Image Name: N/A Subfolder: /var/lib/docker/overlay2/8cf368abcb835aff6cb6c19cc7b630a32fd5cf23698f9b0fc93a9ed738708a7d-init
40K Image ID: N/A Image Name: N/A Subfolder: /var/lib/docker/overlay2/dc123594104a9a124bfb4def0780c9e2e65205abf366ea37128663cc7020e444-init
40K Image ID: N/A Image Name: N/A Subfolder: /var/lib/docker/overlay2/b5b5b1b4abef270dbc91bdd6c385865d778b6bd8ee9568030635994a296533ab-init
40K Image ID: N/A Image Name: N/A Subfolder: /var/lib/docker/overlay2/78226c49fc485223aa093120075cf760af3ff184952eb3f10819652981cf5124-init
40K Image ID: N/A Image Name: N/A Subfolder: /var/lib/docker/overlay2/a2b95f146415f89c5be49ae361164466e06c8f572a89fb1f3bd3ee8c14109f3c-init
40K Image ID: N/A Image Name: N/A Subfolder: /var/lib/docker/overlay2/2de288641807d7f4146a579b42d93c62dfa5b539a9a41628592aefbb16dffb20-init
40K Image ID: N/A Image Name: N/A Subfolder: /var/lib/docker/overlay2/c6f5534c7692f17026ec630ed076f051914367334916e8bc1a7ee8b9ea3c8da6-init
40K Image ID: 81bab60b840e Image Name: netdata/netdata:edge Subfolder: /var/lib/docker/overlay2/557dc929b44dbf8f56c017d71648e3dcf5df42d4ae45522a1c8319316dab6efb
40K Image ID: 53f011320bac Image Name: filebrowser/filebrowser:v2-s6 Subfolder: /var/lib/docker/overlay2/fbd2875f8195d4ebf67d9e43b12c2e6e8bbc3512d77d73de83897ebda68398bf
36K Image ID: 9a510ccf1de4 Image Name: postgres:16-alpine Subfolder: /var/lib/docker/overlay2/90831482be916d167036989bbbc74fd8ef156ef44d0eaa10180587b45cada241
36K Image ID: 89c919b22c13 Image Name: zauberzeug/nicegui:latest Subfolder: /var/lib/docker/overlay2/9189514b80b1ac311df7fe79dba8c8d856f3f3c52fb3880692f69ed4112c094d
396K Image ID: N/A Image Name: N/A Subfolder: /var/lib/docker/overlay2/l
40K Image ID: 89c919b22c13 Image Name: zauberzeug/nicegui:latest Subfolder: /var/lib/docker/overlay2/b5a1a0f5473f942dd88c52f6e38689a6d3fcebf157640122ae3d54cdeec6e614
36K Image ID: ffb6864bc6f8 Image Name: louislam/dockge:1 Subfolder: /var/lib/docker/overlay2/10da3c9a9d54a96145163ce70f680d2fee458acaf77d300c3fe33c01be4e11e1
36K Image ID: b23ac695b1b4 Image Name: louislam/uptime-kuma:1 Subfolder: /var/lib/docker/overlay2/c64fa7986a23b02391406d8b99040ea2d1261e70496d778eccaf91eb671d0072
36K Image ID: 2e7228c0315e Image Name: flowiseai/flowise:latest Subfolder: /var/lib/docker/overlay2/3a670fdb3c2ca2b72f1f03bdff00a762641546ff45dc7eeac76feeec25b7689b
32K Image ID: 9a510ccf1de4 Image Name: postgres:16-alpine Subfolder: /var/lib/docker/overlay2/f463aafd74960608f1ffb2fba5de101dc10fecf4f52022e19e80a9a17c41706a
28K Image ID: ffb6864bc6f8 Image Name: louislam/dockge:1 Subfolder: /var/lib/docker/overlay2/db62eb43b9a60a135d7119a46aaf84726ad7484c43ccd7542a73a32c2622926f
28K Image ID: 9a510ccf1de4 Image Name: postgres:16-alpine Subfolder: /var/lib/docker/overlay2/1e31a6ff9eec4981357ae5b8aa9e51f9e99b0defcb9954238f09267d64e6c6a3
28K Image ID: b23ac695b1b4 Image Name: louislam/uptime-kuma:1 Subfolder: /var/lib/docker/overlay2/6d7e99168b19fb1de03a54e57b7dbd816bb8f6f72e0843e970795634b9e9439f
28K Image ID: 89c919b22c13 Image Name: zauberzeug/nicegui:latest Subfolder: /var/lib/docker/overlay2/07cd3509e14a75f406646c468c8ef96073b7ea0ab231cae87c328cabc61c5189
28K Image ID: 89c919b22c13 Image Name: zauberzeug/nicegui:latest Subfolder: /var/lib/docker/overlay2/d94c15106fa777ec5df2f18787b3bbafe13b54fc81bc3eaa4bc93a1def464a50
28K Image ID: b23ac695b1b4 Image Name: louislam/uptime-kuma:1 Subfolder: /var/lib/docker/overlay2/3e2ae7a5c55528b2708064323486d88b9beecb756ed556ab82f6e2b19b3b5882
24K Image ID: 89c919b22c13 Image Name: zauberzeug/nicegui:latest Subfolder: /var/lib/docker/overlay2/c1eca20bdd90d0d8b65dacfbbe64742697c548a205203fef7d1ae6bea17cdf8c
24K Image ID: 2e7228c0315e Image Name: flowiseai/flowise:latest Subfolder: /var/lib/docker/overlay2/f6e32501c061a5237d6eb0c6fd878c0b6b3a09c52105bbc8e26dbe47eede6274
24K Image ID: ffb6864bc6f8 Image Name: louislam/dockge:1 Subfolder: /var/lib/docker/overlay2/7ec87e3da5abb0920146610dc5aaf3b1f257ea87e8d701e696f6fbdbe51d17af
24K Image ID: 89c919b22c13 Image Name: zauberzeug/nicegui:latest Subfolder: /var/lib/docker/overlay2/b3d8dc9ee09fd3649da5370c3de00764309f6194a5d595a38a2a3dac8e9ac32f
24K Image ID: b23ac695b1b4 Image Name: louislam/uptime-kuma:1 Subfolder: /var/lib/docker/overlay2/95a75358634d89ff52294d2c59fe6cd7ea188f29e6445cbef88296a08cc2c6a6
24K Image ID: a7079537d060 Image Name: harness/gitness:3.0.0-beta.5 Subfolder: /var/lib/docker/overlay2/17145fbf43a0394832c88f2305ed5923601a4adbf86e40e3cfcf930f3d0593c7
24K Image ID: a7079537d060 Image Name: harness/gitness:3.0.0-beta.5 Subfolder: /var/lib/docker/overlay2/ad3087421c452c131c34846406a74c551c4cd23595af7e18f67bb29df94c8399
24K Image ID: 9a510ccf1de4 Image Name: postgres:16-alpine Subfolder: /var/lib/docker/overlay2/bd2aeafbfb363b9cd57102c8f4885bdfe8c4aa8339bcc281dd05d4789d99d705
20K Image ID: b23ac695b1b4 Image Name: louislam/uptime-kuma:1 Subfolder: /var/lib/docker/overlay2/447033b241af6fd664626609f8b7bed74275f02407f0a12e1381a916033001e3
16K Image ID: 5e183bda51e6 Image Name: amir20/dozzle:latest Subfolder: /var/lib/docker/overlay2/7464a99ae22b909b5657a85b7428d669ea743e5de39989e59767edbf4a9efa81
Why are there overlay2 subfolders not “matching an image” even after docker system prune -a?
It’s normal to see directories in /var/lib/docker/overlay2 that don’t obviously map to a current image ID. Common reasons:
-
Container writable layers: Running (or stopped-but-not-removed) containers have a writable layer that lives in
overlay2. If you still have containers, you will still have overlay data. -
Build cache: Modern builds (BuildKit) can create significant cache data.
docker system prune -adoesn’t always remove all build cache. Usedocker builder pruneto target it. -
Shared / referenced layers: Images share layers, and Docker won’t remove anything that is still referenced by an existing image or container. Also remember: the “directory name” you see in
overlay2is not necessarily the same identifier you see fromdocker image ls. -
Init layers and internal metadata: The
*-initdirectories and metadata structures are part of how Docker sets up containers and layers. -
Leaked/orphaned data (rare): Abrupt power loss, daemon crashes, or storage corruption can leave “leftovers”. If you suspect this, the safer approach is to use Docker’s reporting (
docker system df -v) and logs, and consider a controlled cleanup window.
Important: avoid manual deletion
Even if a directory looks “unused”, deleting overlay2 directories by hand can corrupt Docker’s state.
If you truly need a “start fresh” reset, do it by resetting the Docker data directory (with Docker stopped) and only after backing up what you need.
Controlled “reset” approach (last resort)
- Stop/remove containers you don’t need.
- Back up anything important (especially volumes and bind-mounted data).
- Stop the Docker daemon.
- Move
/var/lib/dockerto a backup location. - Start Docker again (it will recreate
/var/lib/docker).
Then re-pull images and restore only what you need. This is disruptive, but safer than deleting random overlay directories.
Conclusions
A growing /var/lib/docker/overlay2 directory is usually a symptom of one of these:
- unused/stopped containers and unused images
- build cache growth (especially with BuildKit)
- containers writing large amounts of data to their writable layer (better moved to volumes/bind mounts)
- large/unmanaged volumes
Use Docker’s own disk reports (docker system df -v) and supported prune commands first. Avoid manual deletion inside /var/lib/docker/overlay2. If you need a full reset, do it in a controlled way by moving /var/lib/docker while Docker is stopped, after backing up anything important.