diff --git a/docker-pull-all-images b/docker-pull-all-images new file mode 100755 index 0000000..79f4269 --- /dev/null +++ b/docker-pull-all-images @@ -0,0 +1,84 @@ +#!/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