Delete Docker image from registry

I finally found out how I can delete images from my self hosted remote docker registry. Here is how:

Prerequisites

Make sure, that the docker registry supports deletion of images:

user@host:~$ docker exec -it registry cat /etc/docker/registry/config.yml
version: 0.1
log:
  fields:
    service: registry
storage:
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
  delete:
    enabled: true
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3

As you can see this registry allows deletion of images.

HTTP API calls

For the next step one needs the URL of the registry. In the example it is “my.docker.registry”. The image is “goa-systems-example” and the tag to be deleted is “0.0.1”.

The codes starting with GET, HEAD and DELETE are HTTP requests that can be executed in a tool like Postman or can be scripted with PowerShell or Python for batch processing.

These commands worked for me and I take no responsibility for accidental deletion. When in doubt consult the official Docker documentation. Please handle with care!

1. Get repositories

GET https://my.docker.registry/v2/_catalog

returns

{
    "repositories": [
        "goa-systems-example"
    ]
}

2. Get images

GET https://my.docker.registry/v2/goa-systems-example/tags/list

returns

{
    "name": "goa-systems-example",
    "tags": [
        "0.0.1"
    ]
}

3. Get manifests for each tag

This requires special header.

HEAD https://my.docker.registry/v2/goa-systems-example/manifests/0.0.1
Accept: application/vnd.docker.distribution.manifest.v2+json

returns as HTTP header

Docker-Content-Digest: sha256:4b2ac7d3aaa230f4070ff97f4c8bf7fdb6f86a172b2a2621e1aa9806b5e6b01c

4. Delete image with digest

DELETE https://my.docker.registry/v2/goa-systems-example/manifests/sha256:4b2ac7d3aaa230f4070ff97f4c8bf7fdb6f86a172b2a2621e1aa9806b5e6b01c