Context
Я использую функцию реестра Docker в Sonatype Nexus3 (версия OSS 3.18.1-01) для хранения частных Docker изображений.
Через пару дней go изображения с недопустимыми именами оказались в реестре, что вызвало многократные повторяющиеся ошибки с внутренней очисткой заданий cron в Nexus3. Вы можете увидеть имена неисправных репозиториев в выводе запроса v2 / _catalog ниже.
$ curl https://registry.example.com/v2/_catalog -i
HTTP/1.1 200 OK
Date: Wed, 11 Mar 2020 12:55:29 GMT
Server: Nexus/3.18.1-01 (OSS)
X-Content-Type-Options: nosniff
Content-Security-Policy: sandbox allow-forms allow-modals allow-popups allow-presentation allow-scripts allow-top-navigation
X-XSS-Protection: 1; mode=block
Docker-Distribution-Api-Version: registry/2.0
Content-Type: application/json
Content-Length: 2941
{
"repositories": [
"MiniProfiler.EF6",
"MiniProfiler.Shared",
...
]
}
На данный момент я не знаю, были ли эти изображения помещены в реестр кем-то из моей команды или они результат какой-то неожиданной проблемы с хранилищем BLOB-объектов - у меня нет возможности это проверить. Интересный факт: есть пакеты NuGet, названные одинаково в другом хранилище BLOB-объектов в том же экземпляре Nexus.
Действия по устранению неполадок
Я пытался удалить неисправные образы из реестра несколькими способами, все без успеха.
Nexus3 GUI
Неисправные репозитории не отображаются в браузере реестра Docker в Nexus 'GUI. Они также не могут быть найдены с помощью функции поиска Nexus.
Nexus3 встроенный OrientDB
Я искал классы asset
и component
, связанные с неисправными репозиториями в OrientDB. К сожалению, в базе данных Nexus нет ресурсов или компонентов с такими именами.
Docker Registry API v2
Я также пытался удалить их через Docker Registry API V2, но неверный формат имени, кажется, вызывает проблемы, когда я пытаюсь выполнить какую-либо операцию в неисправном хранилище.
$ curl https://registry.example.com/v2/MiniProfiler.EF6/manifests/latest -i
HTTP/1.1 400 Bad Request
Date: Wed, 11 Mar 2020 12:58:24 GMT
Server: Nexus/3.18.1-01 (OSS)
X-Content-Type-Options: nosniff
Content-Security-Policy: sandbox allow-forms allow-modals allow-popups allow-presentation allow-scripts allow-top-navigation
X-XSS-Protection: 1; mode=block
Docker-Distribution-Api-Version: registry/2.0
Content-Type: application/json
Content-Length: 165
{
"errors": [
{
"code": "NAME_INVALID",
"message": "invalid repository name",
"detail": [
{
"Name": "MiniProfiler.EF6"
},
{
"Reason": "invalid path component: MiniProfiler.EF6"
}
]
}
]
}
Docker CLI
Как и ожидалось, Docker CLI не например, неверный формат имени.
$ docker pull registry.example.com/MiniProfiler.EF6
invalid reference format: repository name must be lowercase
Если я удаляю заглавные буквы из имени изображения, реестр возвращает ошибку 404. Not Found.
$ docker pull registry.example.com/miniprofiler.ef6
Using default tag: latest
Error response from daemon: manifest for registry.example.com/miniprofiler.ef6:latest not found: manifest unknown: manifest unknown
Вопросы
Кто-нибудь сталкивался с такими проблемами с Nexus3? Кто-нибудь когда-либо сталкивался с такими проблемами с другой реализацией реестра Docker?
Если у кого-нибудь есть какие-либо шаги по устранению неполадок, чтобы предложить, я в значительной степени открыт для всего на данный момент ...
I также будет сообщать об ошибке в Sonatype, чтобы обеспечить хорошую видимость этой ситуации.