#!/usr/bin/env python3 import os import subprocess import sys from escape_handler import start_exit_handler DOCKER_DIR = "/home/andiamolino/docker" def get_running_containers(): """Gibt eine Liste der laufenden Container zurück.""" result = subprocess.run(["docker", "ps", "--format", "{{.Names}}"], capture_output=True, text=True) return result.stdout.strip().split('\n') if result.stdout else [] def stop_container(container_name): """Stoppt einen spezifischen Container.""" subprocess.run(["docker", "stop", container_name], check=True) def start_docker_compose(dir_path): """Startet Docker-Compose in einem bestimmten Verzeichnis.""" print(f"Starte Docker-Compose in {dir_path}") subprocess.run(["docker-compose", "up", "-d"], cwd=dir_path, check=True) def get_docker_compose_dirs(): """Findet alle Verzeichnisse mit einer docker-compose.yml Datei.""" dirs = [] for dir_name in os.listdir(DOCKER_DIR): dir_path = os.path.join(DOCKER_DIR, dir_name) if os.path.isdir(dir_path) and dir_name != "containerdaten": if os.path.exists(os.path.join(dir_path, "docker-compose.yml")): dirs.append(dir_path) return dirs def main(): start_exit_handler running_containers = get_running_containers() if running_containers: print("Laufende Container:") for container in running_containers: print(f"- {container}") choice = input("Möchten Sie laufende Container stoppen? (j/n): ").strip().lower() if choice == 'j': for container in running_containers: stop_container(container) print("Alle laufenden Container wurden gestoppt.") start_new = input("Möchten Sie neue Container starten? (j/n): ").strip().lower() if start_new != 'j': print("Keine neuen Container werden gestartet. Programm wird beendet.") sys.exit(0) docker_dirs = get_docker_compose_dirs() print("\nGefundene Docker-Compose-Projekte:") for i, dir_path in enumerate(docker_dirs, 1): print(f"{i}. {os.path.basename(dir_path)}") print("\nWählen Sie die zu startenden Projekte (durch Kommas getrennte Nummern, oder 'alle'):") choice = input().strip().lower() if choice == 'alle': to_start = docker_dirs else: try: indices = [int(x.strip()) - 1 for x in choice.split(',')] to_start = [docker_dirs[i] for i in indices if 0 <= i < len(docker_dirs)] except ValueError: print("Ungültige Eingabe. Beende Programm.") sys.exit(1) # Stelle sicher, dass Traefik zuerst gestartet wird traefik_dir = next((d for d in to_start if os.path.basename(d) == "traefik"), None) if traefik_dir: to_start.remove(traefik_dir) to_start.insert(0, traefik_dir) for dir_path in to_start: try: start_docker_compose(dir_path) except subprocess.CalledProcessError as e: print(f"Fehler beim Starten von {os.path.basename(dir_path)}: {e}") if __name__ == "__main__": main()