Удалите образ docker в реестре, удалив файлы / папки на сервере

У меня есть следующая проблема с удалением изображения или тега в docker-registry v2:

У меня есть сервер, на котором работает docker-registry. Я создал образ и нажал на него, что теперь я хочу уйти. Теперь я хочу удалить изображение (или, по крайней мере, тег, если изображение невозможно).

Текущая версия интерфейса не поддерживает такую функциональность.

Я попробовал это через curl -u MY_USERNAME -X DELETE MY_DOMAIN:PORT/v2/IMAGE_NAME/manifests/REFERENCE команда, как и HTTP API reference состояния и ввел пароль, но выполнение привело к появлению пустой строки, ошибки аутентификации нет (аутентификация активирована) или сообщения об успешном завершении. Тег по-прежнему доступен.

Поскольку у меня есть доступ к серверу, мне пришла в голову следующая идея: могу ли я просто и савелий просто удалить папку v2/repositories/IMAGE_NAME/_manifests/tags/VERSION (или другой файл /папка)? Или это приводит к разрыву реестра? Какие начальные шаги, например, остановить службу реестра, я должен сделать?

Да, они не сделали это простым, и это все еще не идеально, но API реестра v2 теперь имеет возможность удалять изображения.

Могу ли я просто и просто удалить папку v2/repositories/IMAGE_NAME/_manifests/tags/VERSION

Фактические данные изображения хранятся в каталоге больших двоичных объектов на диске, но они являются общими для разных манифестов, поэтому небезопасно просто удалять этот каталог, если вы не рассмотрели все изображения, которые могут совместно использовать большие двоичные объекты.

Вот способ удаления изображения с помощью API docker версии v2:

Во-первых, в вашем реестре должно быть включено УДАЛЕНИЕ. Либо установите env var:

REGISTRY_STORAGE_DELETE_ENABLED: "true"

или в конфигурации.yml должен установить

storage:  delete:    enabled: true

Затем запустите удаление с помощью вызовов API (Вы можете легко протестировать с помощью Postman или просто с помощью curl / etc)

записка: В приведенных ниже вызовах добавьте "Accept: application/vnd.docker.distribution.manifest.v2+json" к заголовку HTTP

  1. Сбор дайджеста изображений:

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

    Этот вызов возвращает ключ заголовка Docker-Content-Digest с таким значением, как это: sha256:b57z31xyz0f616e65f106b424f4ef29185fbd80833255d79dabc73b8eb873bd

  2. Используя это значение из шага 2, запустите DELETE http-вызов:

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

    API возвращает 202 Accepted

  3. Запустите сборку мусора вручную, если вы не хотите ждать ее следующего запланированного запуска: registry garbage-collect /etc/docker/registry/config.yml

    Пример при запуске реестра в качестве контейнера: docker exec -t registry-test ./bin/registry garbage-collect /etc/docker/registry/config.yml

    Сборщик мусора удаляет связанные двоичные объекты и манифестирует их с диска для вас.

На этом этапе image:tag полностью удаляется с диска и удаляется из реестра. Большие двоичные объекты будут удалены, и вы увидите, что манифесты исчезли из v2/repositories/<image_name>/_manifests

ПРИМЕЧАНИЕ: Если это было последнее изображение в вашем репозитории, вам все равно придется вручную удалить список репозитория с диска (v2/repositories/<image_name>/_layers) - однако это всего лишь метаданные. Фактические данные изображения уже удалены. Я полагаю, что это может быть ошибка в сборщике мусора. У меня есть вопрос по этому поводу здесь: Личный реестр Docker - Удалены все изображения, но они все еще отображаются в каталоге

БОЛЕЕ ПОДРОБНАЯ ИНФОРМАЦИЯ:

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