Развертывание приватного Docker Registry с HTTP-аутентификацией и SSL/TLS
- Ошибка
http: server gave HTTP response to HTTPS clientпри попыткеdocker push/pull. - Ошибка
x509: certificate signed by unknown authorityпри использовании самоподписанных сертификатов. - Несанкционированный доступ к образам компании из-за отсутствия аутентификации.
1. Генерация учетных данных htpasswd
mkdir -p /opt/registry/auth /opt/registry/data /opt/registry/certs
apt-get install -y apache2-utils
htpasswd -B -b -c /opt/registry/auth/htpasswd reguser SecretPassword1232. Конфигурация и запуск Docker Registry
Создайте docker-compose.yml:
version: '3.8'
services:
registry:
image: registry:2
restart: always
ports:
- "5000:5000"
environment:
REGISTRY_AUTH: htpasswd
REGISTRY_AUTH_HTPASSWD_REALM: "Registry Realm"
REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt
REGISTRY_HTTP_TLS_KEY: /certs/domain.key
REGISTRY_STORAGE_DELETE_ENABLED: "true"
volumes:
- /opt/registry/data:/var/lib/registry
- /opt/registry/auth:/auth:ro
- /opt/registry/certs:/certs:rodocker compose up -d3. Добавление доверенного сертификата на клиентах
Скопируйте корневой сертификат в системный каталог Docker:
mkdir -p /etc/docker/certs.d/registry.example.com:5000
cp domain.crt /etc/docker/certs.d/registry.example.com:5000/ca.crt
systemctl restart docker4. Проверка авторизации и пуша образов
docker login registry.example.com:5000 -u reguser -p SecretPassword123
docker tag nginx:latest registry.example.com:5000/my-nginx:v1
docker push registry.example.com:5000/my-nginx:v1 Частые вопросы (FAQ)
Как включить удаление старых образов (Garbage Collection) в реестре?
Включите флаг REGISTRY_STORAGE_DELETE_ENABLED: true, удалите манифест через API и запустите сборщик мусора: docker exec registry bin/registry garbage-collect /etc/docker/registry/config.yml.
Как временно разрешить подключение к небезопасному HTTP-реестру?
Добавьте 'insecure-registries': ['192.168.1.100:5000'] в /etc/docker/daemon.json и перезапустите демон Docker.