Since upgrading Nexus Repository to 3.91.0-07 (from 3.87.1-01), our Docker
hosted repo has stopped reclaiming disk space, despite the scheduled
cleanup tasks all reporting success. We’ve run Nexus for 10+ years and
used its Docker registry for the last 2–3.
We suspect it is related to an external expire script that deletes
old tags via DELETE /v2/{name}/manifests/{digest}, a monthly “Docker -
Delete unused manifests and images” task, and a daily “Admin - Compact
blob store” task.
Before upgrading Nexus our system monitoring of disc space showed a
clean monthly “sawtooth” pattern (the Docker containers are the bulk of
the disc space consumption); after the upgrade the sawtooth stopped and
the blob store has just been growing.
Environment: single Docker hosted repository, file blob store, H2 backend, no
HA/clustering.
Evidence from today:
- du -sh on the blob store content: 157G
- nx-blob-repo-space-report: totalBytes 168,082,071,473 / reclaimableBytes 8,792
- DockerGCTask log: “Removed 0 unused layers” (109 tagged manifests, 36 digest
manifests, 645 layers referenced) - Compact blob store log: removed 15 empty directories, otherwise nothing
- Spot-checked an old layer on disk: .properties file present, no deleted=true;
a REST sha256 search returns no items. So that blob exists on disk with no DB
record and no soft-delete marker — invisible to both GC and Compact. - Test today: pushed a fresh tag, deleted it via our script, ran the GC and
Compact tasks. Manifest and config metadata got cleaned up; the associated
layer blobs did not.
A few things we’ve already ruled out or considered: there is no
*-deletions.index file at the blob store root, but my understanding
is that’s expected on H2/PostgreSQL since soft-deletes moved into the
soft_deleted_blobs table, so rebuildDeletedBlobIndex doesn’t seem to
apply. “Admin - Cleanup unused asset blobs” is present and running every
30 min. Single Docker repo, so the cross-repo layer protection shouldn’t
be in play.
We are wondering if anyone else has hit the same pattern on
3.91.0 — layer blobs accumulating on disk with no DB record and no
deleted=true — or seen something obviously wrong with the workflow
above? Happy to share full task logs, the space report JSON, and a
support zip.