
У меня есть сервер Docker, защищенный брандмауэром, поэтому я не могу извлекать образы напрямую из какого-либо реестра, кроме внутренних серверов.
Я настроилдвазеркала реестра ( registry-1.docker.io
и mcr.microsoft.com
), следующиедокументы.
Мой daemon.json
выглядит так:
{
"registry-mirrors": [
"https://registry_1_docker_io.example.com",
"https://mcr_microsoft_com.example.com"
]
}
Я могу успешно извлечь образы из Docker Hub, выполнив команду:
$ docker pull nginx:1
1: Pulling from library/nginx
....
Status: Downloaded newer image for nginx:1
Моя проблема в том, чтоЯ не могу извлечь изображения из реестра Microsoft:
# docker pull mcr.microsoft.com/mssql/server:2017-latest
Error response from daemon: Get "https://mcr.microsoft.com/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
Docker пытается подключиться напрямую к mcr
моему зеркалу и игнорирует его. Если я использую короткое имя образа ( mssql/server:2017-latest
вместо mcr.microsoft.com/mssql/server:2017-latest
), это работает, но он может получить образ из docker hub вместо microsoft's mcr, если тег на обоих одинаков.
Кроме того, если посмотреть логи, то Docker по порядку пробует все прокси-серверы для образа, поэтому может возникнуть ситуация, когда образ будет извлечен из неправильного репозитория.
Есть ли способ отметить зеркало как зеркало для определенного реестра?
решение1
Есть ли способ отметить зеркало как зеркало для определенного реестра?
Нет, это ограничение движка Docker, registry-mirrors
только для Docker Hub. Вы можете следитьвыпуск 18818Больше подробностей.
Это может измениться, когда в ближайшем будущем Docker перенесет обработку образов с Docker на containerd, поскольку у containerd другая конфигурация для обработки зеркал.