Я столкнулся с проблемой с автономным Docker Registry .При вытягивании определенного изображения тянуть не удается для некоторых его слоев.Как только я запускаю команду docker pull
, некоторые слои сообщают:
9894d615bbeb: Retrying in 5 seconds
dfc282427f6f: Retrying in 5 seconds
8dbb865cf7b1: Retrying in 1 second
Это происходит сразу после запуска команды, слои не большие.
- Реестр реестраработает безупречно около года.
- Недавно мы приняли более док-центрированный поток CI / CD, и возникла необходимость постоянно очищать реестр.По этой причине мы запускаем ночное задание очистки реестра:
- Удаляем все манифесты в файловой системе (за исключением нескольких постоянных образов, которые мы хотим сохранить)
- Запускаем команду
bin/registry garbage-collect
, чтобыудалить все не указанные ссылки
- Я проверил, что в реестре действительно существуют BLOB-объекты для этих слоев, и я могу перейти к ним в файловой системе.
- проблема воспроизводится как в локальной системе, так и на удаленном сервере
Журналы реестра Docker показывают, что HTTP-запрос для большого двоичного объекта был успешным:
time="2019-05-03T13:09:21.714123801Z" level=info msg="response completed" go.version=go1.7.6 http.request.host=registry.example.com http.request.id=e5c01bee-a755-48a5-b87a-716560dd0e25 http.request.method=GET http.request.remoteaddr=94.237.28.78 http.request.uri="/v2/applications/foo/dist-staging/blobs/sha256:9894d615bbebb5b235bb5a7aed17e9b2ba35c95c9fc8c0c763476c057536842f" http.request.useragent="docker/17.05.0-ce go/go1.7.5 git-commit/89658be kernel/4.4.0-145-generic os/linux arch/amd64 UpstreamClient(Swipely/Docker-API 1.33.6)" http.response.contenttype="application/octet-stream" http.response.duration=8.154072ms http.response.status=200 http.response.written=0 instance.id=92dfad5e-bf76-4db6-a8de-07901539d36e service=registry version=v2.6.2
172.17.0.1 - - [03/May/2019:13:09:21 +0000] "GET /v2/applications/foo/dist-staging/blobs/sha256:9894d615bbebb5b235bb5a7aed17e9b2ba35c95c9fc8c0c763476c057536842f HTTP/1.0" 200 0 "" "docker/17.05.0-ce go/go1.7.5 git-commit/89658be kernel/4.4.0-145-generic os/linux arch/amd64 UpstreamClient(Swipely/Docker-API 1.33.6)"
Реестр докеров находится за прокси-сервером nginx, но его настройки в последнее время не изменились.Во время отладки я попробовал следующее, но не повезло:
proxy_buffering off;
proxy_max_temp_file_size 0;
Что еще я должен проверить?Может ли это быть как-то связано с очисткой реестра?Зачем?Как?
Редактировать
Кажется, что что-то устарело в кеше реестра, потому что при его перезапуске выдается unknown blob
ошибок.
После перекомпоновки и повторного нажатия на изображение эта ошибка исчезла, и Реестр смог снова предоставить изображение клиентам.
Я думаю, это означает, что что-то испортилось во время очистки реестра, но почему?garbage-collect
должен удалять только не указанные ссылки и быть безопасным для использования, если я правильно понимаю?
Этот вопрос занял свое место, но я оставлю его здесь полностью для других.