tools/docker-pull-all-images

85 lines
2.8 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Проверка наличия аргумента
if [ $# -eq 0 ]; then
echo "Использование: $0 [-p <protocol>] <registry-url>"
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