Container-registry blob GC purged blobs of still-referenced image tags → dangling manifests / MANIFEST_UNKNOWN (2026-07 incident) #25
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Incident (2026-07-03/04)
The Gitea container registry served dangling manifests for many image tags: the tag/manifest row existed but the underlying config/layer blobs were gone, so
skopeo inspect(config fetch) anddocker pullfailed withMANIFEST_UNKNOWN/not found, whileskopeo inspect --raw(manifest only) still "succeeded".Confirmed simultaneously across unrelated repos:
oleks/mempalace: every pre-3.5.0 tag dead —3.3.6,3.3.6-arm64,3.4.x-arm64,latest,latest-arm64— only the newest3.5.0-arm64intact.oleks/nix-ci:latest(amd64) dead → broke every downstream CI step (trying and failing to pull image).This is a recurrence — the same failure hit
mempalace:3.3.6-arm64on 2026-06-25 (fixed then by delete-dangling-version + clean re-push; see the fleet HelmRelease comment / oleks/mempalace#12).Impact
Suspected cause
The registry/package GC (Gitea
cron.cleanup_packages/ container blob GC, or a retention rule) is removing blobs that are still referenced by live manifests — an orphaned-blob sweep that under-counts references (shared layers, per-arch sub-manifests of a multi-arch index, or<ver>vs<ver>-<arch>tags sharing blobs), or a retention policy pruning tags too aggressively.Ask
latest, the last N released versions, and any currently-deployed digest.Related: oleks/mempalace#18 (protect key tags / digest-pin fleet), oleks/mempalace#12 (prior instance), oleks/nixos-ci#2 (nix-ci:latest casualty), oleks/mempalace#14 (incident that exposed it). Gitea runs as the Nix fork on armer.