Garbage Collector wants to remove everything ???

Author: luckylinuxCreated Sep 22, 2025Updated Aug 15, 2026

Description

I am trying to free up some Space used by my local Docker Mirror (which is running Registry 3.0.0) after I removed some Tags e.g. on the frigate Docker Image:

root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:833cdcb-h8l
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:d0cc8cb-h8l
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:d0cc8cb-rocm
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.15.0      
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.15.0-beta4
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.15.0-beta4-h8l
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.15.0-beta4-rk 
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.15.0-beta4-rocm
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.15.0-beta5     
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.15.0-beta5-h8l
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.15.0-beta5-rk 
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.15.0-beta5-rocm
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.15.0-beta7     
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.15.0-beta7-rk 
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.15.0-beta7-rocm
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.15.0-h8l       
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.15.0-rc1
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.15.0-rc1-h8l
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.15.0-rc1-rk 
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.15.0-rc1-rocm
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.15.0-rc2     
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.15.0-rc2-rk 
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.15.0-rc2-rocm
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.15.0-rk      
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.15.0-rocm
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.15.1     
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.15.1-h8l
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.15.1-rk 
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.15.1-rocm
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.15.2     
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.15.2-h8l
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.15.2-rk 
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.15.2-rocm
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.16.0-rc3 
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.16.0-rc3-rk
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.16.0-rc3-rocm
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.16.0-rc3-standard-arm64
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.16.0-rc3-tensorrt      
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.16.0-rc3-tensorrt-jp6
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.16.0-rc4             
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.16.0-rc4-rk
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.16.0-rc4-rocm
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.16.0-rc4-standard-arm64
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.16.0-rc4-tensorrt      
root@docker-sync-registries:/opt/app# regctl tag rm docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate:0.16.0-rc4-tensorrt-jp6
root@docker-sync-registries:/opt/app# regctl tag ls docker.MYDOMAIN.TLD/ghcr.io/blakeblackshear/frigate
0.16.0
0.16.0-rk
0.16.0-rocm
0.16.0-standard-arm64
0.16.0-tensorrt
0.16.0-tensorrt-jp6
stable
stable-rk

However, when running the Garbage Collector after this, it seems like the Garbage Collector wants to remove EVERYTHING basically, including the Tags that were NOT removed.

Configuration File:

/ # cat /etc/docker/registry/config.yml
version: 0.1

auth:
  token:
    realm: "https://docker-auth.MYDOMAIN.TLD/auth"
    service: "Docker Registry"
    issuer: "docker-local-mirror-auth"
    rootcertbundle: "/cert/auth/cert.pem"
    autoredirect: false

storage:
  filesystem:
    rootdirectory: /var/lib/registry

  maintenance:
    uploadpurging:
      enabled: true
      age: 999999999h
      interval: 24h
      dryrun: false

  delete:
    enabled: true

http:
  addr: "[::]:5000"
  prefix: ""
  secret: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Reproduce

  1. Enter the Container with podman exec -it registry /bin/sh
  2. Run /bin/registry garbage-collect /etc/docker/registry/config.yml --dry-run --delete-untagged

Logs:

20250922_registry_garbage_collection.txt.gz

Everything seems to be marked for deletion (including the Docker Images of e.g. frigate-0.16.0 which are NOT untagged), or am I misunderstanding the Output ?

Expected behavior

Only untagged Images and very old ones (999999999h) should be marked for Deletion.

registry version

registry github.com/distribution/distribution/v3 3.0.0

Additional Info

No response

Source: distribution/distribution