import os import uuid import shutil import json import subprocess import hashlib from datetime import datetime # Archivo JSON para guardar los datos de los contenedores CONTAINER_DATA_FILE = os.getenv("CONTAINER_DATA_FILE") # Nombre y etiqueta para la imagen base BASE_IMAGE_TAG = os.getenv("BASE_IMAGE_TAG") # ------------------------------- # Función: Eliminar todos los contenedores listados en el JSON # ------------------------------- def delete_all_containers(): if not os.path.exists(CONTAINER_DATA_FILE): print("❌ No hay contenedores para eliminar.") return with open(CONTAINER_DATA_FILE, 'r') as file: containers = json.load(file) if not containers: print("❌ No hay contenedores listados en el archivo JSON.") return # Lista para los contenedores que no pudieron eliminarse remaining_containers = [] # Eliminar contenedores y redes for container in containers: try: # Comprobar si el contenedor existe realmente result = subprocess.getoutput(f"docker ps -a -q -f id={container['id']}") if not result: print(f"⚠️ El contenedor {container['name']} ya no existe. Eliminando del JSON...") else: print(f"➤ Eliminando contenedor: {container['name']} con ID: {container['id']}") os.system(f"docker rm -f {container['id']}") print(f"➤ Eliminando red: {container['network']}") os.system(f"docker network rm {container['network']}") eliminar_carpeta(container['name']) print(f"➤ Eliminando carpeta: {container['network']}") except Exception as e: print(f"❌ Error eliminando el contenedor {container['name']}: {e}") # Guardar el contenedor en la lista si no se pudo eliminar remaining_containers.append(container) continue # Actualizar el archivo JSON solo con los contenedores que no pudieron eliminarse if remaining_containers: with open(CONTAINER_DATA_FILE, 'w') as file: json.dump(remaining_containers, file, indent=4) print("⚠️ Algunos contenedores no pudieron eliminarse y se mantuvieron en el JSON.") else: # Si todos los contenedores fueron eliminados, vaciar el archivo JSON open(CONTAINER_DATA_FILE, 'w').close() print("✔ Todos los contenedores y redes han sido eliminados y el archivo JSON ha sido limpiado.") # ------------------------------- # Función: Eliminar carpeta de datos de un contenedor # ------------------------------- def eliminar_carpeta(nombre_carpeta): ruta_carpeta = os.path.join('d_apps/', nombre_carpeta) shutil.rmtree(ruta_carpeta) print(f"✔ Carpeta {nombre_carpeta} eliminada correctamente.") # ------------------------------- # Función: Limpiar imágenes huérfanas # ------------------------------- def clean_unused_images(): print("➤ Eliminando imágenes huérfanas...") os.system('docker image prune -f') # ------------------------------- # Función: Limpiar redes huérfanas # ------------------------------- def clean_unused_networks(): print("➤ Eliminando redes huérfanas...") os.system('docker network prune -f') ############################################## # Ejecución del script ############################################## if __name__ == "__main__": # Eliminar todos los contenedores y redes delete_all_containers() clean_unused_images() clean_unused_networks()