Обзор
Локальный прокси зеркал реестров для dockerd, работающий только на чтение.
Локальный прокси зеркал реестров для dockerd, работающий только на чтение. Он находится между dockerd и одним или несколькими выбранными пользователем зеркалами Registry v2 и дополняет встроенную поддержку зеркал в dockerd:
- Управление во время работы. Добавляйте, удаляйте и отключайте источники без перезапуска dockerd.
- Изоляция сбоев. После заданного числа последовательных сбоев механизм circuit breaker временно исключает неотвечающее или неисправное зеркало из обработки запросов до успешной проверки.
- Настраиваемая гонка запросов. Дублирующие запросы с задержкой (hedged requests) позволяют использовать первый пригодный ответ. Гонка включена по умолчанию; её можно отключить.
- Возобновление загрузки слоёв. При обрыве передачи загрузка слоя продолжается с того же байтового смещения на другом зеркале; демон по-прежнему проверяет дайджест.
- Резервный путь к официальному реестру. Если прокси не может обслужить запрос, dockerd может обратиться к официальному реестру через настроенный резервный путь. Реестр должен оставаться доступным и разрешать загрузку.
Поддерживаются оба хранилища образов dockerd: containerd (hosts.toml) и классическое хранилище graphdriver (daemon.json, только docker.io).
Установка
Развёртывание в Docker
Пример
В этом примере oci-mirror-proxy завершил загрузку за 508,0 с, а загрузка напрямую с зеркала заняла 740,3 с: в 1,46 раза быстрее, или на 31,4% меньше времени.
| Напрямую с зеркала · 740,3 с | Через oci-mirror-proxy · 508,0 с |
|---|---|
![]() | ![]() |
| Запись asciinema | Запись asciinema |
GIF показывают ускоренную запись; исходные записи сохраняют реальное время. См. подробности записи.
Состояние проекта
Поддерживаются: API реестра для загрузки образов, переключение при сбоях, автоматическое отключение неисправных источников, дублирующие запросы с задержкой, возобновление загрузки blob, аутентификация по токену и HTTP Basic, сокет управления, перечитывание конфигурации и настройка dockerd с отменой изменений.
Не поддерживаются: отправка образов (push), локальный кеш blob, хранилища секретов в системной связке ключей и экспорт метрик.
Требования
- Go 1.26.8 или новее для сборки (либо автоматическая загрузка инструментария Go).
- Локальный Docker Engine в Linux или Docker Desktop в macOS/Windows (контейнеры Linux). См. автоматическую интеграцию с Docker. Для rootless dockerd адрес прослушивания должен быть доступен из его сетевого пространства имён; эту настройку выполняет администратор. См. rootless dockerd.
Замечания по безопасности
- API реестра не использует аутентификацию, поэтому по умолчанию слушает
127.0.0.1. Еслиlistenуказывает не на loopback, загрузка образов без аутентификации становится доступна по сети. - Значения паролей не записываются в конфигурацию напрямую: пароль задаётся ссылкой вида
env:NAMEилиfile:/path. Секреты скрываются в журналах и выводе%v. - Заголовок клиента
Authorizationникогда не пересылается источникам. - Сокет управления защищён правами файловой системы: для частных экземпляров каталог имеет права
0700, а сокет —0600. Системные службы root со стандартным адресом/run/oci-mirror-proxy/admin.sockили/var/run/oci-mirror-proxy/admin.sockпредоставляют всем локальным пользователям доступ к API управления (каталог0711, сокет0666), включая изменение и перечитывание конфигурации. Заменить каталог или сокет может только root; API управления не публикуется по TCP. - Конфигурация зеркал объединяется на основе фактических файлов, без зависимости от состояния установки. Перед атомарной заменой изменяемые файлы резервируются;
revertудаляет только записи выбранного прокси.

