Elimine la imagen de docker en el registro eliminando archivos/carpetas en el servidor

Tengo el siguiente problema al eliminar una imagen o etiqueta en docker-registry v2:

Tengo un servidor que ejecuta un registro de ventana acoplable. Creé una imagen y la empujé, que ahora quiero que se haya ido. Ahora quiero eliminar la imagen (o al menos la etiqueta, si la imagen es imposible).

La versión actual de frontend no es compatible con dicha funcionalidad.

Lo probé a través de un curl -u MY_USERNAME -X DELETE MY_DOMAIN:PORT/v2/IMAGE_NAME/manifests/REFERENCE comando, como el HTTP API reference estados, e ingresó la contraseña, pero la ejecución resultó en una línea vacía, sin error de autenticación (la autenticación está activada) o mensaje de éxito. La etiqueta todavía está disponible.

Como tengo acceso al servidor, se me ocurrió la siguiente idea:¿ Puedo eliminar la carpeta de manera simple y segura v2/repositories/IMAGE_NAME/_manifests/tags/VERSION (u otro archivo/carpeta)? ¿O eso da como resultado una interrupción del registro? ¿Qué pasos iniciales debo seguir, como detener el servicio de registro?

Sí, no lo hicieron fácil y todavía no es perfecto, pero la API de registro v2 ahora tiene la capacidad de eliminar imágenes.

¿Puedo eliminar de forma sencilla y segura la carpeta v2 / repositories/IMAGE_NAME/_manifests/tags / VERSION

Los datos de la imagen real se almacenan en el directorio de blobs en el disco, pero se comparten entre diferentes manifiestos, por lo que no es seguro purgar ese directorio a menos que haya considerado todas las imágenes que pueden compartir los blobs.

Aquí está el método para eliminar una imagen usando la API de docker v2:

En primer lugar, su registro debe tener la eliminación habilitada. Establezca la var env:

REGISTRY_STORAGE_DELETE_ENABLED: "true"

o en la configuración.yml tiene que establecer

storage:  delete:    enabled: true

A continuación, ejecute la eliminación a través de llamadas a la API (Puede probar fácilmente a través de Postman o simplemente usando curl / etc)

NOTA: En las llamadas a continuación, agregue "Accept: application/vnd.docker.distribution.manifest.v2+json" al encabezado HTTP

  1. Resumen de imágenes de Gather:

    HEAD https://myprivateregistry:5001/v2/<image_name>/manifests/<image_tag>

    Esta llamada devuelve la clave de encabezado Docker-Content-Digest con un valor como este: sha256:b57z31xyz0f616e65f106b424f4ef29185fbd80833255d79dabc73b8eb873bd

  2. Usando ese valor del paso 2, ejecute el DELETE llamada http:

    DELETE https://myprivateregistry:5001/v2/<image_name>/manifests/sha256:b57z31xyz0f616e65f106b424f4ef29185fbd80833255d79dabc73b8eb873bd

    Devoluciones de API 202 Accepted

  3. Ejecute la recolección de elementos no utilizados manualmente si no desea esperar a su próxima ejecución programada: registry garbage-collect /etc/docker/registry/config.yml

    Ejemplo si se ejecuta el registro como contenedor: docker exec -t registry-test ./bin/registry garbage-collect /etc/docker/registry/config.yml

    El recolector de elementos no utilizados elimina los blobs y los manifiestos asociados del disco por usted.

En este punto, la etiqueta image:se elimina por completo del disco y se purga del registro. Los blobs se eliminan y verá que los manifiestos se han ido de v2/repositories/<image_name>/_manifests

NOTA: Si esta fue la última imagen en su repositorio, aún debe eliminar manualmente la lista de repositorios del disco (v2/repositories/<image_name>/_layers)- sin embargo, esto es solo metadatos. Los datos de imagen reales ya se han eliminado. Creo que esto podría ser un error en el recolector de basura. Tengo una pregunta al respecto aquí: Registro privado de Docker: se eliminaron todas las imágenes, pero aún se muestran en el catálogo

MÁS DETALLES:

https://docs.docker.com/registry/spec/api/#deleting-an-imagehttps://jsosic.wordpress.com/2017/01/23/deleting-images-from-docker-registry/