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") CONTENEDOR_IDENTIFICADOR = "9755e379cd01" # ------------------------------- # Función: Eliminar un contenedor por ID o nombre y actualizar el JSON # ------------------------------- def delete_container(identifier): if not os.path.exists(CONTAINER_DATA_FILE): print("❌ No hay archivo JSON de contenedores.") return with open(CONTAINER_DATA_FILE, 'r') as file: containers = json.load(file) # Determinar si el identificador es un ID o un nombre container = next((c for c in containers if c['id'] == identifier or c['name'] == identifier), None) if not container: print(f"❌ No se encontró ningún contenedor con ID o nombre: {identifier} en el JSON.") return try: # Comprobar si el contenedor existe realmente en Docker result = subprocess.getoutput(f"docker ps -a -q -f id={container['id']}") if not result: print(f"⚠️ El contenedor {container['name']} ya no existe en Docker. Eliminando del JSON...") else: # Eliminar el contenedor y su red asociada 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']}") # Actualizar el JSON excluyendo el contenedor eliminado containers = [c for c in containers if c['id'] != container['id']] with open(CONTAINER_DATA_FILE, 'w') as file: json.dump(containers, file, indent=4) print(f"✔ Contenedor {container['name']} eliminado correctamente.") except Exception as e: print(f"❌ Error eliminando el contenedor {container['name']}: {e}") # ------------------------------- # 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') if __name__ == "__main__": identifier = CONTENEDOR_IDENTIFICADOR if identifier: delete_container(identifier) # Limpiar imágenes y redes huérfanas clean_unused_images() clean_unused_networks() else: print("❌ No se ingresó ningún ID o nombre.")