Skip to content

Instantly share code, notes, and snippets.

@jaytaylor
Last active June 10, 2024 13:57
Show Gist options
  • Save jaytaylor/86d5efaddda926a25fa68c263830dac1 to your computer and use it in GitHub Desktop.
Save jaytaylor/86d5efaddda926a25fa68c263830dac1 to your computer and use it in GitHub Desktop.
One liner for deleting images from a v2 docker registry

One liner for deleting images from a v2 docker registry

Just plug in your own values for registry and repo/image name.

registry='localhost:5000'
name='my-image'
curl -v -sSL -X DELETE "http://${registry}/v2/${name}/manifests/$(
    curl -sSL -I \
        -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \
        "http://${registry}/v2/${name}/manifests/$(
            curl -sSL "http://${registry}/v2/${name}/tags/list" | jq -r '.tags[0]'
        )" \
    | awk '$1 == "Docker-Content-Digest:" { print $2 }' \
    | tr -d $'\r' \
)"

If all goes well

* About to connect() to localhost port 5000 (#0)
*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 5000 (#0)
> DELETE /v2/my-image/manifests/sha256:14f6ecba1981e49eb4552d1a29881bc315d5160c6547fdd100948a9e30a90dff HTTP/1.1
> User-Agent: curl/7.29.0
> Host: localhost:5000
> Accept: */*
>
< HTTP/1.1 202 Accepted
< Docker-Distribution-Api-Version: registry/2.0
< X-Content-Type-Options: nosniff
< Date: Wed, 15 Nov 2017 23:25:30 GMT
< Content-Length: 0
< Content-Type: text/plain; charset=utf-8
<
* Connection #0 to host localhost left intact

Garbage cleanup

Finally, invoke garbage cleanup on the docker-registry container.

For example:

docker exec -it docker-registry bin/registry garbage-collect /etc/docker/registry/config.yml
@abelmferreira
Copy link

hi everybody
i need something similar @lautitoti created, but not based on time, based on registry image tag count

I publish the script here
https://gist.github.com/abelmferreira/c38036f9642f2adf260ad068ac08f187

@seanslma
Copy link

I updated the solution from @abelmferreira

  • added -h option: show help info
  • added -t option: min timestamp to keep
  • added -d flag: delete or dry run

The updated script:
https://gist.github.com/seanslma/05c2176e18b8f33b34a1af8f059b4562

@vnovichek
Copy link

https://github.com/fraunhoferfokus/deckschrubber
written in go so quite fast, supports all options of choosing images plus it fetches repositories from the registry

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment