Check the image exists:
docker pull registry.runme.io/runme-50b2af51-f401-43fe-aaec-808868b7e3a0:latest
latest: Pulling from runme-50b2af51-f401-43fe-aaec-808868b7e3a0
092586df9206: Already exists
ef599477fae0: Already exists
4530c6472b5d: Already exists
d34d61487075: Already exists
87fc2710b63f: Already exists
e83c771c5387: Already exists
c28bd271641e: Already exists
5137e6957710: Already exists
1d8bcbc41a69: Already exists
3d45045f5e5b: Extracting [==================================================>] 156B/156B
0eb4cf560de4: Download complete
74b8a560ad82: Downloading [=> ] 25.34kB/1.195MB
503c898d97d7: Waiting
^C
Code sample:
package main
import (
"os"
"strings"
"github.com/sirupsen/logrus"
"github.com/velp/docker-registry-client/registry"
)
const (
registryFullURL = "https://registry.runme.io/v2/"
image = "runme-50b2af51-f401-43fe-aaec-808868b7e3a0"
)
func main() {
logger := &logrus.Logger{
Hooks: make(logrus.LevelHooks),
Out: os.Stdout,
Formatter: new(logrus.TextFormatter),
}
logger.Level = logrus.DebugLevel
// Remove /v2 in the end of registry URL
registryURL := registryFullURL
pos := strings.Index(registryURL, "/v2")
if pos > -1 {
registryURL = registryURL[:pos]
}
// Create registry client
hub, err := registry.New(registryURL, "", "")
if err != nil {
logger.Fatalf("registry failed: %s", err)
}
// Set registry logger
hub.Logf = logger.Infof
// Get list of tags for the image
tags, err := hub.Tags(image)
if err != nil {
logger.Fatalf("tags failed: %s", err)
}
for _, tag := range tags {
// Get list of layers from manifest
manifest, err := hub.ManifestV2(image, tag)
if err != nil {
logger.Fatalf("get manifest failed: %s", err)
}
// Remove each layer for the tag
for _, layer := range manifest.Layers {
err := hub.DeleteBlob(image, layer.Digest)
if err != nil {
logger.Fatalf("delete blob failed: %s", err)
}
}
// Remove tag for the image
digest, err := hub.ManifestDigestV2(image, tag)
if err != nil {
logger.Fatalf("get manifest digest failed: %s", err)
}
err = hub.DeleteManifest(image, digest)
if err != nil {
logger.Fatalf("delete manifest failed: %s", err)
}
}
}
Result:
2020/03/07 21:55:05 registry.ping url=https://registry.runme.io/v2/
INFO[0000] registry.tags url=https://registry.runme.io/v2/runme-50b2af51-f401-43fe-aaec-808868b7e3a0/tags/list repository=runme-50b2af51-f401-43fe-aaec-808868b7e3a0
INFO[0000] registry.manifest.get url=https://registry.runme.io/v2/runme-50b2af51-f401-43fe-aaec-808868b7e3a0/manifests/latest repository=runme-50b2af51-f401-43fe-aaec-808868b7e3a0 reference=latest
INFO[0000] registry.blob.delete url=https://registry.runme.io/v2/runme-50b2af51-f401-43fe-aaec-808868b7e3a0/blobs/sha256:092586df92068bd6b59c497f379e48302aa1b27cf76b2de64d262ba7bc19e47b repository=runme-50b2af51-f401-43fe-aaec-808868b7e3a0 digest=sha256:092586df92068bd6b59c497f379e48302aa1b27cf76b2de64d262ba7bc19e47b
INFO[0001] registry.blob.delete url=https://registry.runme.io/v2/runme-50b2af51-f401-43fe-aaec-808868b7e3a0/blobs/sha256:ef599477fae0e7485cae7d038240cda6358b3af22c7eb4ea502c60771b68dcae repository=runme-50b2af51-f401-43fe-aaec-808868b7e3a0 digest=sha256:ef599477fae0e7485cae7d038240cda6358b3af22c7eb4ea502c60771b68dcae
INFO[0001] registry.blob.delete url=https://registry.runme.io/v2/runme-50b2af51-f401-43fe-aaec-808868b7e3a0/blobs/sha256:4530c6472b5d2a08201c9cd65f43a788e526eb4fe498a4fbe5e4d5688535cd21 repository=runme-50b2af51-f401-43fe-aaec-808868b7e3a0 digest=sha256:4530c6472b5d2a08201c9cd65f43a788e526eb4fe498a4fbe5e4d5688535cd21
INFO[0001] registry.blob.delete url=https://registry.runme.io/v2/runme-50b2af51-f401-43fe-aaec-808868b7e3a0/blobs/sha256:d34d61487075d127bf6dd2906ea3abc50e0a3cd9aa2f230fc41b253b153a17ee repository=runme-50b2af51-f401-43fe-aaec-808868b7e3a0 digest=sha256:d34d61487075d127bf6dd2906ea3abc50e0a3cd9aa2f230fc41b253b153a17ee
INFO[0001] registry.blob.delete url=https://registry.runme.io/v2/runme-50b2af51-f401-43fe-aaec-808868b7e3a0/blobs/sha256:87fc2710b63fcf6c0a5c876b1b37773d9e949cb4d66eeb06889ef84f7b5a5a93 repository=runme-50b2af51-f401-43fe-aaec-808868b7e3a0 digest=sha256:87fc2710b63fcf6c0a5c876b1b37773d9e949cb4d66eeb06889ef84f7b5a5a93
INFO[0001] registry.blob.delete url=https://registry.runme.io/v2/runme-50b2af51-f401-43fe-aaec-808868b7e3a0/blobs/sha256:e83c771c5387a93b121fdd5ff15d311f4b2426629857e685841e82fa4b054fab repository=runme-50b2af51-f401-43fe-aaec-808868b7e3a0 digest=sha256:e83c771c5387a93b121fdd5ff15d311f4b2426629857e685841e82fa4b054fab
INFO[0002] registry.blob.delete url=https://registry.runme.io/v2/runme-50b2af51-f401-43fe-aaec-808868b7e3a0/blobs/sha256:c28bd271641eda8399e2728a0443168efec665d6570335d7fd436e89aac758d7 repository=runme-50b2af51-f401-43fe-aaec-808868b7e3a0 digest=sha256:c28bd271641eda8399e2728a0443168efec665d6570335d7fd436e89aac758d7
INFO[0002] registry.blob.delete url=https://registry.runme.io/v2/runme-50b2af51-f401-43fe-aaec-808868b7e3a0/blobs/sha256:5137e695771060efc647c706bd2a392d661fc38376a3fe5b60faf59959c418b2 repository=runme-50b2af51-f401-43fe-aaec-808868b7e3a0 digest=sha256:5137e695771060efc647c706bd2a392d661fc38376a3fe5b60faf59959c418b2
INFO[0002] registry.blob.delete url=https://registry.runme.io/v2/runme-50b2af51-f401-43fe-aaec-808868b7e3a0/blobs/sha256:1d8bcbc41a69aa7e29758bf24b61408cc357637b45b01958a64f3ce5759c5af8 repository=runme-50b2af51-f401-43fe-aaec-808868b7e3a0 digest=sha256:1d8bcbc41a69aa7e29758bf24b61408cc357637b45b01958a64f3ce5759c5af8
INFO[0002] registry.blob.delete url=https://registry.runme.io/v2/runme-50b2af51-f401-43fe-aaec-808868b7e3a0/blobs/sha256:3d45045f5e5b4d0e9fd670cfc5f3738956c3f28ba5845cce47b00cfd240a9d92 repository=runme-50b2af51-f401-43fe-aaec-808868b7e3a0 digest=sha256:3d45045f5e5b4d0e9fd670cfc5f3738956c3f28ba5845cce47b00cfd240a9d92
INFO[0003] registry.blob.delete url=https://registry.runme.io/v2/runme-50b2af51-f401-43fe-aaec-808868b7e3a0/blobs/sha256:0eb4cf560de44b4784fdf73c5a02cef447195d76d9b18d2e1cf01db473f8d350 repository=runme-50b2af51-f401-43fe-aaec-808868b7e3a0 digest=sha256:0eb4cf560de44b4784fdf73c5a02cef447195d76d9b18d2e1cf01db473f8d350
INFO[0003] registry.blob.delete url=https://registry.runme.io/v2/runme-50b2af51-f401-43fe-aaec-808868b7e3a0/blobs/sha256:74b8a560ad8293c7c5aa7ee8be239e04a89d885950d74c367f2252b04077bfd8 repository=runme-50b2af51-f401-43fe-aaec-808868b7e3a0 digest=sha256:74b8a560ad8293c7c5aa7ee8be239e04a89d885950d74c367f2252b04077bfd8
INFO[0003] registry.blob.delete url=https://registry.runme.io/v2/runme-50b2af51-f401-43fe-aaec-808868b7e3a0/blobs/sha256:503c898d97d71ce2bf040fc2b517263d33c7e716dab0c8a87222ab0272c44790 repository=runme-50b2af51-f401-43fe-aaec-808868b7e3a0 digest=sha256:503c898d97d71ce2bf040fc2b517263d33c7e716dab0c8a87222ab0272c44790
INFO[0003] registry.manifest.head url=https://registry.runme.io/v2/runme-50b2af51-f401-43fe-aaec-808868b7e3a0/manifests/latest repository=runme-50b2af51-f401-43fe-aaec-808868b7e3a0 reference=latest
INFO[0003] registry.manifest.delete url=https://registry.runme.io/v2/runme-50b2af51-f401-43fe-aaec-808868b7e3a0/manifests/sha256:20484f84e736d54143bd9d88de9c79e070b6706ffb6d857a6bda24dbaef7446a repository=runme-50b2af51-f401-43fe-aaec-808868b7e3a0 reference=sha256:20484f84e736d54143bd9d88de9c79e070b6706ffb6d857a6bda24dbaef7446a
After:
docker pull registry.runme.io/runme-50b2af51-f401-43fe-aaec-808868b7e3a0:latest
Error response from daemon: manifest for registry.runme.io/runme-50b2af51-f401-43fe-aaec-808868b7e3a0:latest not found: manifest unknown: manifest unknown