Сбой Docker для некоторых слоев из реестра, размещенного самостоятельно - PullRequest
0 голосов
/ 03 мая 2019

Я столкнулся с проблемой с автономным 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 должен удалять только не указанные ссылки и быть безопасным для использования, если я правильно понимаю?


Этот вопрос занял свое место, но я оставлю его здесь полностью для других.

...