Как заставить docker daemon скачивать образы с локального registry и не обращаться к docker hub?

Внутри локалки есть registry или harbor с настроенной функцией кэширования. Как заставить конечные машины вообще не обращаться к docker.io? Указание registry-mirrors и insecure-registries не помогает. Когда лёг Amazon 20-го октября - пайпланы тоже сломались.

UPD. Главная проблема официальных рекомендаций в том, что индексы всё равно идут качаться с registry-1.docker.io. Да, потом уже в дело вступает локальный кэш, но вот если индексы не отдаются, то вниз по течению тоже всё падает.


Ответы (1 шт):

Автор решения: don Rumata

Коротко: /etc/hosts + insecure-registries.

Длинно:

Если в конфиге docker daemon указать через registry-mirrors ТОЛЬКО ваш локальный кэш, то обращение к registry-1.docker.io всё равно останется. Решение простое: завернуть dns в ваш локальный registry/harbor/etc. Но т.к. ssl/tls никто не отменял, то в insecure-registries добавляем и registry-1.docker.io.

grep docker /etc/hosts | grep -v '#'
10.10.250.102 docker.io
10.10.250.102 registry-1.docker.io
nslookup u.local 
Server:         127.0.0.53
Address:        127.0.0.53#53

Name:   u.local
Address: 10.10.250.102

jq . /etc/docker/daemon.json:

{
  "hosts": [
    "unix:///var/run/docker.sock"
  ],
  "insecure-registries": [
    "registry-1.docker.io",
    "u.local"
  ],
  "registry-mirrors": [
    "http://u.local"
  ]
}

Демо: https://asciinema.org/a/754531

docker --version 
Docker version 27.5.0, build a187fa5
→ Ссылка