From 051397a08d82b254d4f168fd2cfbd452a6044b03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20H=C3=BCske?= Date: Sun, 18 Feb 2024 11:42:55 +0100 Subject: [PATCH] Check container --- main.py | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/main.py b/main.py index e861104..aae5e9f 100644 --- a/main.py +++ b/main.py @@ -1,39 +1,39 @@ -import docker, os +import docker +import os from docker.errors import APIError, NotFound -label_key = "ofelia.enabled" -label_value = "true" - +# Lese den Namen des Containers/Services aus einer Umgebungsvariable container_name_to_restart = os.getenv('CONTAINER_NAME_TO_RESTART') if not container_name_to_restart: print("Die Umgebungsvariable 'CONTAINER_NAME_TO_RESTART' muss gesetzt sein.") exit(1) +label_key = "ofelia.enabled" +label_value = "true" + client = docker.from_env() def restart_container(container_name): try: - container = client.containers.get(container_name) - container.restart() - print(f"Container {container_name} wurde neu gestartet.") - except NotFound: - print(f"Container {container_name} nicht gefunden.") + # Filtere Container nach dem Service-Namen + containers = client.containers.list(filters={"label": f"com.docker.compose.service={container_name}"}) + for container in containers: + container.restart() + print(f"Container {container.name} ({container.id}) wurde neu gestartet.") + return # Beendet die Schleife nach dem ersten Neustart except APIError as e: - print(f"API Fehler beim Neustarten des Containers {container_name}: {e}") + print(f"Fehler beim Neustarten des Containers {container_name}: {e}") def handle_event(event): if event.get("Type") == "container" and event.get("Action") == "start": container_id = event.get("Actor").get("ID") - try: - container = client.containers.get(container_id) - labels = container.labels - if labels.get(label_key) == label_value: - print(f"Container mit Label {label_key}:{label_value} gestartet: {container.name}") - restart_container(container_name_to_restart) - except NotFound: - print(f"Container {container_id} nicht gefunden.") - except APIError as e: - print(f"API Fehler beim Abrufen des Containers {container_id}: {e}") + container = client.containers.get(container_id) + labels = container.labels + + # Überprüfe, ob der Container das spezifische Label hat und nicht der Container ist, der neu gestartet werden soll + if labels.get(label_key) == label_value and container.attrs['Config']['Labels'].get('com.docker.compose.service') != container_name_to_restart: + print(f"Container mit Label {label_key}:{label_value} gestartet: {container.name}") + restart_container(container_name_to_restart) def main(): print("Skript läuft und hört auf Container-Ereignisse...")