#!/bin/bash # ============================================================================== # Script para hacer Downgrade de Docker en sistemas basados en Debian/Ubuntu (v2) # ============================================================================== # # ADVERTENCIA: Este script desinstalará la versión actual de Docker # y eliminará los datos de Docker existentes (imágenes, contenedores, volúmenes). # Se recomienda hacer una copia de seguridad si tienes datos importantes. # # Uso: # 1. Guarda este script como 'downgrade_docker.sh'. # 2. Dale permisos de ejecución: chmod +x downgrade_docker.sh # 3. Ejecútalo con sudo: sudo ./downgrade_docker.sh # # ============================================================================== set -e # Termina el script si algún comando falla # --- 1. Definir la versión de Docker a instalar --- # Cambia esta variable si deseas una versión diferente. # Busca versiones disponibles con: apt-cache madison docker-ce # El formato debe ser como "5:27.1.1-1~ubuntu.22.04~jammy" # Dejaremos esto en blanco por ahora para que puedas elegir de la lista. TARGET_DOCKER_VERSION="" echo "--- Iniciando el proceso de downgrade de Docker (v2) ---" # --- 2. Desbloquear (unhold) paquetes de Docker --- echo "Paso 1: Desbloqueando paquetes de Docker existentes..." sudo apt-mark unhold docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin || echo "No se encontraron paquetes de Docker bloqueados, continuando." # --- 3. Detener los servicios de Docker --- echo "Paso 2: Deteniendo los servicios de Docker..." sudo systemctl stop docker.service sudo systemctl stop docker.socket sudo systemctl stop containerd # --- 4. Desinstalar la versión actual de Docker --- echo "Paso 3: Desinstalando los paquetes de Docker actuales..." # Se agrega --allow-change-held-packages para asegurar la desinstalación sudo apt-get remove --allow-change-held-packages -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras sudo apt-get purge -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras sudo apt-get autoremove -y --purge # --- 5. Limpiar directorios residuales (¡CUIDADO!) --- echo "Paso 4: Limpiando directorios de Docker (esto eliminará imágenes y contenedores)..." # Comentado por seguridad. Descomenta si realmente quieres una limpieza completa. # sudo rm -rf /var/lib/docker # sudo rm -rf /var/lib/containerd # --- 6. Asegurar que el repositorio de Docker esté configurado --- echo "Paso 5: Configurando el repositorio de Docker..." sudo apt-get update sudo apt-get install -y ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc # Añadir el repositorio a las fuentes de Apt echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update # --- 7. Listar las versiones disponibles y solicitar al usuario que elija --- echo "Paso 6: Versiones de Docker disponibles en el repositorio:" apt-cache madison docker-ce | awk '{print $3}' echo -e "\nPor favor, copia y pega la versión exacta que deseas instalar de la lista anterior (ej: 5:27.1.1-1~ubuntu.22.04~jammy):" read -r TARGET_DOCKER_VERSION if [ -z "$TARGET_DOCKER_VERSION" ]; then echo "No se ha seleccionado ninguna versión. Abortando." exit 1 fi # --- 8. Instalar la versión de Docker seleccionada --- echo "Paso 7: Instalando la versión $TARGET_DOCKER_VERSION..." sudo apt-get install -y docker-ce=$TARGET_DOCKER_VERSION docker-ce-cli=$TARGET_DOCKER_VERSION containerd.io docker-buildx-plugin docker-compose-plugin # --- 9. Verificar la instalación --- echo "Paso 8: Verificando la versión de Docker instalada..." docker --version # --- 10. Bloquear la versión de Docker (opcional pero recomendado) --- echo "Paso 9: Bloqueando la versión de Docker para evitar actualizaciones automáticas." sudo apt-mark hold docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin echo -e "\n--- Proceso de downgrade de Docker completado. ---" echo "Recuerda reiniciar los servicios que dependen de Docker, como CasaOS o los contenedores específicos." echo "Puedes reiniciar el servicio de Docker con: sudo systemctl restart docker"