Комментарии 22
Для Kubernetes, еще как вариант, можно использовать Kyverno для настройки
Привожу пример как это сделать: https://kyverno.io/policies/other/replace-image-registry/replace-image-registry/
macOS:
~/.docker/daemon.json
Docker Desktop:
Settings -> Docker Engine
Есть еще ряд зеркал: https://huecker.io, https://yandex.cr/mirror/...
Но, остался еще один вопрос: как производить поиск образов, как это было на сайте hub.docker.com?
https://gallery.ecr.aws/ довольно таки удобен и пока не закрыт
Для простоты сего мероприятия я сделал хаб
Да вас наверное будет удивительно, но зачастую данный файлик не является пустым, > перезапишет файл полностью, разумней было бы добавить эти записи через jq
Данный файлик обновляется не перетирается.
опреативно
А push через зеркало допустим?
Это немного про другое. Через push накатываются обновления кода. Т.е. вы просто загрузили код проекта, и больше ничего делать не нужно. Если вы развертываете с использованием Dockerfile, система просто сама правильно сходит на Docker Hub и загрузит что нужно
Поясните, пожалуйста, почему другое? У меня сейчас пулится через зеркало прекрасно, но тот же частный закрытый репозиторий не пушится. Говорит 403 и всё тут. Подскажите, как починить, буду очень признателен
Плейбук для Ansible:
Код
---
- name: Install Docker
hosts: all
become: true
vars_files:
- '{{ inventory_dir }}/vars/vars.yaml'
vars:
docker_config_file: "/etc/docker/daemon.json"
docker_features:
containerd-snapshotter: true
docker_mirrors_ru:
- "https://dockerhub.timeweb.cloud"
- "https://mirror.gcr.io"
- "https://daocloud.io"
- "https://c.163.com"
- "https://registry.docker-cn.com"
tasks:
- name: Get the public IP of the host
command: curl -s ifconfig.me
register: public_ip
changed_when: false
- name: Query IPInfo for geolocation information
uri:
url: "https://ipinfo.io/{{ public_ip.stdout }}/json"
method: GET
return_content: yes
register: ipinfo_response
- name: Parse the country from IPInfo response
set_fact:
country: "{{ ipinfo_response.json.country }}"
- name: Debug country information
debug:
msg: "The country for IP {{ public_ip.stdout }} is {{ country }}"
- name: Ensure Docker configuration file exists
file:
path: "{{ docker_config_file }}"
state: touch
mode: '0644'
when: country == 'RU'
- name: Read existing Docker configuration
slurp:
path: "{{ docker_config_file }}"
register: docker_config_file_content
when: country == 'RU'
- name: Parse existing Docker configuration
set_fact:
docker_config: "{{ docker_config_file_content.content | b64decode | from_json | default({}) }}"
when: country == 'RU' and docker_config_file_content.content | b64decode | length > 0
- name: Use default Docker configuration
set_fact:
docker_config: {}
when: country == 'RU' and not (docker_config_file_content.content | b64decode | length > 0)
- name: Set Docker Hub mirrors
set_fact:
docker_config: "{{ docker_config | combine({'registry-mirrors': docker_mirrors_ru}) }}"
when: country == 'RU'
- name: Set Docker features
set_fact:
docker_config: "{{ docker_config | combine({'features': docker_features}) }}"
when: country == 'RU'
- name: Write updated Docker configuration
copy:
content: "{{ docker_config | to_nice_json }}"
dest: "{{ docker_config_file }}"
mode: '0644'
backup: yes
when: country == 'RU'
- name: Restart Docker
service:
name: docker
state: restarted
when: country == 'RU'
Работает для установленного Docker в режиме пользователя
На WSL файл находится по пути C:/Users/<username>/.docker/daemon.json
Для containerd (в т.ч. если он используется как CRI для кубера):
/etc/containerd/config.toml
version = 2
[plugins]
[plugins."io.containerd.grpc.v1.cri"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://mirror.gcr.io"]
возможно что то не так делаю, но все равно пытается через registry-1.docker.io
ctr: failed to resolve reference "docker.io/calico/node:v3.26.1": unexpected status from HEAD request to https://registry-1.docker.io/v2/calico/node/manifests/v3.26.1: 403 Forbidden
ctr
не использует CRI, так что вам нужно использовать hosts.toml
/etc/containerd/certs.d/docker.io/hosts.toml
server = "https://registry-1.docker.io"
[host."https://mirror.gcr.io"]
capabilities = ["pull", "resolve"]
проверьте что в /etc/containerd/config.toml
есть
/etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".registry]
config_path = "/etc/containerd/certs.d"
При указании зеркал в js демон докера перестает стартовать. Возвращаю предыдущую версию тут же стартует.
Пробовал и одно зеркало и как в статье - несколько. Результат всегда один - "exit-code" с комментарием что докер стартует слишком часто.
{ "registry-mirrors" : [ "https://mirror.gcr.io", "https://dockerhub.timeweb.cloud" ] }
В статье представлена лишь часть конфига. А не готовое решение.
У меня примерно так было, когда я яндексовское зеркало пытался подставить. Оно ругалось так: invalid mirror: path, query, or fragment at end of the URI "https://cr.yandex/mirror"
Т.е., видимо, должен быть ТОЛЬКО домен, без всяких путей (как /mirror у яндекса) и параметров.
ЗЫ. версия докера 24.0.5
Доступ к Docker Hub из России. Как подключиться к Docker Hub после блокировки