#!/bin/bash # Проверка наличия аргумента if [ $# -eq 0 ]; then echo "Использование: $0 [-p ] " echo "Пример: $0 -p http example.com" exit 1 fi PROTOCOL="https" REGISTRY=$1 # Массив для хранения списка образов declare -a IMAGES=() # Обработка опции протокола while [ $# -gt 0 ]; do case $1 in -p) PROTOCOL=$2 shift 2 ;; *) REGISTRY=$1 shift ;; esac done # Получаем список всех репозиториев echo "Получаем список репозиториев с $PROTOCOL://$REGISTRY..." REPOS=$(curl -s -X GET "$PROTOCOL://$REGISTRY/v2/_catalog?n=1000") # Проверяем корректность ответа if [ $? -ne 0 ]; then echo "Ошибка при подключении к регитри: $REGISTRY" exit 1 fi # Проверяем, что ответ содержит корректный JSON if ! echo "$REPOS" | jq -e . > /dev/null; then echo "Некорректный ответ от регитри. Возможно, требуется аутентификация или неправильный URL." exit 1 fi # Парсим список репозиториев for REPO in $(echo "$REPOS" | jq -r '.repositories[]'); do echo "Обработка репозитория: $REPO" # Получаем список тегов для репозитория TAGS=$(curl -s -X GET "$PROTOCOL://$REGISTRY/v2/$REPO/tags/list") # Проверяем корректность ответа if [ $? -ne 0 ]; then echo "Ошибка при получении тегов для репозитория $REPO" continue fi # Проверяем, что ответ содержит корректный JSON if ! echo "$TAGS" | jq -e . > /dev/null; then echo "Некорректный ответ от регитри для репозитория $REPO" continue fi # Проверяем, есть ли теги if [ $(echo "$TAGS" | jq '.tags | length') -eq 0 ]; then echo " Нет тегов для репозитория $REPO" continue fi # Качаем каждую версию for TAG in $(echo "$TAGS" | jq -r '.tags[]'); do echo " Качаем $REPO:$TAG..." docker pull "$REGISTRY/$REPO:$TAG" IMAGES+=("$REGISTRY/$REPO:$TAG") done done # Генерируем отчет echo -e "\nГотово! Вот контрольные суммы всех скачанных образов:" for IMAGE in "${IMAGES[@]}"; do DIGEST=$(docker inspect --format='{{.RepoDigests}}' "$IMAGE" | cut -d: -f3) echo "$IMAGE:$DIGEST" done