From b69bd0cb396c2ffa1d5d3c6368b05d36e0a5fa70 Mon Sep 17 00:00:00 2001 From: "artem.bliznetsov" Date: Fri, 5 Dec 2025 15:59:45 +0300 Subject: [PATCH] =?UTF-8?q?docker-pull-all-images=20-=20=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=81=D1=80=D0=B8?= =?UTF-8?q?=D0=BF=D1=82=D0=B0=20=D1=81=D0=BA=D0=B0=D1=87=D0=B8=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=B2=D1=81=D0=B5=D1=85=20=D0=BE=D0=B1?= =?UTF-8?q?=D1=80=D0=B0=D0=B7=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-pull-all-images | 84 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100755 docker-pull-all-images 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