commit c09b59928929d0a324d21c5ee279bd44f4725bb4 Author: Albert Date: Mon Oct 27 22:25:29 2025 +0100 Erstelle Repo diff --git a/docker_info.py b/docker_info.py new file mode 100755 index 0000000..e62762e --- /dev/null +++ b/docker_info.py @@ -0,0 +1,177 @@ +""" +Dieses Skript sammelt Informationen über alle Docker-Container auf dem Host. +Es exportiert die Container- und Netzwerkdaten als CSV-Datei und erzeugt eine GraphML-Datei, +die die Container und Netzwerke als Knoten sowie deren Verbindungen als Kanten darstellt. +Die GraphML-Datei ist für die Visualisierung in yEd optimiert (Star-Schema). +""" + +import docker +import pandas as pd +import re + +def sanitize_id(text): + """ + Erzeugt eine gültige ID für GraphML-Knoten. + Entfernt alle Zeichen außer Buchstaben, Zahlen und Unterstrichen. + IDs dürfen nicht mit einer Zahl beginnen. + """ + return re.sub(r'\W|^(?=\d)', '_', text) + +def get_container_info(): + """ + Sammelt Informationen über alle Docker-Container. + Gibt eine Liste von Dictionaries zurück, die folgende Felder enthalten: + - Container Name + - Watchtower Enabled (aus den Labels com.centurylinklabs.watchtower.enable oder watchtower.enable) + - Network (Name des Netzwerks) + - IP Address (IP-Adresse im Netzwerk) + - Gateway (Gateway-Adresse im Netzwerk) + """ + client = docker.from_env() + containers = client.containers.list(all=True) + + data = [] + + for container in containers: + container_info = client.api.inspect_container(container.id) + + name = container.name + labels = container_info.get('Config', {}).get('Labels', {}) + watchtower_enabled = labels.get('com.centurylinklabs.watchtower.enable', + labels.get('watchtower.enable', 'not set')) + + networks = container_info.get('NetworkSettings', {}).get('Networks', {}) + + for net_name, net_data in networks.items(): + ip_address = net_data.get('IPAddress', 'N/A') + gateway = net_data.get('Gateway', 'N/A') + + data.append({ + 'Container Name': name, + 'Watchtower Enabled': watchtower_enabled, + 'Network': net_name, + 'IP Address': ip_address, + 'Gateway': gateway + }) + + return data + +def save_to_csv(data, filename='docker_container_info.csv'): + """ + Speichert die gesammelten Container-Informationen als CSV-Datei. + :param data: Liste von Dictionaries mit Container-Infos + :param filename: Name der zu erzeugenden CSV-Datei + """ + df = pd.DataFrame(data) + df.to_csv(filename, index=False) + print(f"[+] Daten erfolgreich in {filename} gespeichert.") + +def save_to_graphml(data, filename='docker_container_info.graphml'): + """ + Erstellt eine GraphML-Datei für yEd, die die Container und Netzwerke als Knoten und deren Verbindungen als Kanten darstellt. + - Netzwerke werden zentral angeordnet (Star Schema) + - Container werden kreisförmig um die Netzwerke positioniert + - Die Labels der Container enthalten Name, Watchtower-Status und IP-Infos + :param data: Liste von Dictionaries mit Container-Infos + :param filename: Name der zu erzeugenden GraphML-Datei + """ + from xml.etree.ElementTree import Element, SubElement, ElementTree, register_namespace + + # Nur yEd Namespace registrieren! + register_namespace('y', "http://www.yworks.com/xml/graphml") + + graphml = Element('graphml', xmlns="http://graphml.graphdrawing.org/xmlns") + + # yEd-Label-Schlüssel + key_label = SubElement(graphml, 'key', id="d0", **{ + "for": "node", + "yfiles.type": "nodegraphics" + }) + key_watchtower = SubElement(graphml, 'key', id="d1", **{ + "for": "node", + "attr.name": "Watchtower Enabled", + "attr.type": "string" + }) + + graph = SubElement(graphml, 'graph', id="G", edgedefault="undirected") + + container_labels = {} + containers = set() + networks = set() + for entry in data: + cname = entry['Container Name'] + containers.add(cname) + networks.add(entry['Network']) + if cname not in container_labels: + container_labels[cname] = {} + container_labels[cname]['Watchtower Enabled'] = entry['Watchtower Enabled'] + + # Star Schema: Netzwerke in der Mitte, Container im Kreis + import math + + # Positioniere Netzwerk-Knoten im Zentrum + center_x = 500 + center_y = 400 + net_radius = 0 # Alle Netzwerke exakt im Zentrum + net_positions = {} + for idx, n in enumerate(networks): + node_id = f"network_{sanitize_id(n)}" + node = SubElement(graph, 'node', id=node_id) + net_infos = [entry for entry in data if entry['Network'] == n] + net_texts = [f"{entry['Container Name']}: IP: {entry['IP Address']}, GW: {entry['Gateway']}" for entry in net_infos] + label_text = f"{n}\n" + "\n".join(net_texts) + data_elem = SubElement(node, 'data', key="d0") + y_shape_node = SubElement(data_elem, '{http://www.yworks.com/xml/graphml}ShapeNode') + # Alle Netzwerke im Zentrum + geometry = SubElement(y_shape_node, '{http://www.yworks.com/xml/graphml}Geometry', + x=str(center_x), y=str(center_y), width="200", height="60") + y_node_label = SubElement(y_shape_node, '{http://www.yworks.com/xml/graphml}NodeLabel') + y_node_label.text = label_text + net_positions[n] = (center_x, center_y) + + # Container-Knoten im Kreis um das Zentrum + container_count = len(containers) + radius = 300 + angle_step = 2 * math.pi / max(container_count, 1) + container_positions = {} + for idx, c in enumerate(containers): + node_id = f"container_{sanitize_id(c)}" + ip_infos = [entry for entry in data if entry['Container Name'] == c] + ip_texts = [f"IP: {info['IP Address']}, GW: {info['Gateway']}, Net: {info['Network']}" for info in ip_infos] + # Ermittle Watchtower-Status aus com.centurylinklabs.watchtower.enable + watchtower_status = "aktiviert" if any( + info.get('Watchtower Enabled', '').lower() in ['true', '1', 'yes', 'enabled'] + for info in ip_infos + ) else "deaktiviert" + label_text = f"{c}\nWatchtower: {watchtower_status}\n" + "\n".join(ip_texts) + node = SubElement(graph, 'node', id=node_id) + data_elem = SubElement(node, 'data', key="d0") + y_shape_node = SubElement(data_elem, '{http://www.yworks.com/xml/graphml}ShapeNode') + # Kreisförmige Position + angle = idx * angle_step + x = center_x + radius * math.cos(angle) + y = center_y + radius * math.sin(angle) + geometry = SubElement(y_shape_node, '{http://www.yworks.com/xml/graphml}Geometry', + x=str(x), y=str(y), width="200", height="60") + y_node_label = SubElement(y_shape_node, '{http://www.yworks.com/xml/graphml}NodeLabel') + y_node_label.text = label_text + watchtower_elem = SubElement(node, 'data', key="d1") + watchtower_elem.text = container_labels[c]['Watchtower Enabled'] + container_positions[c] = (x, y) + + edge_id = 0 + for entry in data: + source = f"container_{sanitize_id(entry['Container Name'])}" + target = f"network_{sanitize_id(entry['Network'])}" + edge = SubElement(graph, 'edge', id=f"e{edge_id}", source=source, target=target) + edge_id += 1 + + tree = ElementTree(graphml) + tree.write(filename, encoding='utf-8', xml_declaration=True) + print(f"[+] GraphML erfolgreich in {filename} gespeichert.") + +if __name__ == '__main__': + print("[*] Sammle Container-Informationen...") + container_data = get_container_info() + save_to_csv(container_data) + save_to_graphml(container_data) diff --git a/docker_info_export.py b/docker_info_export.py new file mode 100755 index 0000000..2b88e77 --- /dev/null +++ b/docker_info_export.py @@ -0,0 +1,144 @@ +import docker +import pandas as pd +import re + +def sanitize_id(text): + # Erlaubt nur Buchstaben, Zahlen und Unterstriche + return re.sub(r'\W|^(?=\d)', '_', text) + +def get_container_info(): + client = docker.from_env() + containers = client.containers.list(all=True) + + data = [] + + for container in containers: + container_info = client.api.inspect_container(container.id) + + name = container.name + labels = container_info.get('Config', {}).get('Labels', {}) + watchtower_enabled = labels.get('com.centurylinklabs.watchtower.enable', + labels.get('watchtower.enable', 'not set')) + + networks = container_info.get('NetworkSettings', {}).get('Networks', {}) + + for net_name, net_data in networks.items(): + ip_address = net_data.get('IPAddress', 'N/A') + gateway = net_data.get('Gateway', 'N/A') + + data.append({ + 'Container Name': name, + 'Watchtower Enabled': watchtower_enabled, + 'Network': net_name, + 'IP Address': ip_address, + 'Gateway': gateway + }) + + return data + +def save_to_csv(data, filename='docker_container_info.csv'): + df = pd.DataFrame(data) + df.to_csv(filename, index=False) + print(f"[+] Daten erfolgreich in {filename} gespeichert.") + +def save_to_graphml(data, filename='docker_container_info.graphml'): + from xml.etree.ElementTree import Element, SubElement, ElementTree, register_namespace + + # Nur yEd Namespace registrieren! + register_namespace('y', "http://www.yworks.com/xml/graphml") + + graphml = Element('graphml', xmlns="http://graphml.graphdrawing.org/xmlns") + + # yEd-Label-Schlüssel + key_label = SubElement(graphml, 'key', id="d0", **{ + "for": "node", + "yfiles.type": "nodegraphics" + }) + key_watchtower = SubElement(graphml, 'key', id="d1", **{ + "for": "node", + "attr.name": "Watchtower Enabled", + "attr.type": "string" + }) + + graph = SubElement(graphml, 'graph', id="G", edgedefault="undirected") + + container_labels = {} + containers = set() + networks = set() + for entry in data: + cname = entry['Container Name'] + containers.add(cname) + networks.add(entry['Network']) + if cname not in container_labels: + container_labels[cname] = {} + container_labels[cname]['Watchtower Enabled'] = entry['Watchtower Enabled'] + + # Star Schema: Netzwerke in der Mitte, Container im Kreis + import math + + # Positioniere Netzwerk-Knoten im Zentrum + center_x = 500 + center_y = 400 + net_radius = 0 # Alle Netzwerke exakt im Zentrum + net_positions = {} + for idx, n in enumerate(networks): + node_id = f"network_{sanitize_id(n)}" + node = SubElement(graph, 'node', id=node_id) + net_infos = [entry for entry in data if entry['Network'] == n] + net_texts = [f"{entry['Container Name']}: IP: {entry['IP Address']}, GW: {entry['Gateway']}" for entry in net_infos] + label_text = f"{n}\n" + "\n".join(net_texts) + data_elem = SubElement(node, 'data', key="d0") + y_shape_node = SubElement(data_elem, '{http://www.yworks.com/xml/graphml}ShapeNode') + # Alle Netzwerke im Zentrum + geometry = SubElement(y_shape_node, '{http://www.yworks.com/xml/graphml}Geometry', + x=str(center_x), y=str(center_y), width="200", height="60") + y_node_label = SubElement(y_shape_node, '{http://www.yworks.com/xml/graphml}NodeLabel') + y_node_label.text = label_text + net_positions[n] = (center_x, center_y) + + # Container-Knoten im Kreis um das Zentrum + container_count = len(containers) + radius = 300 + angle_step = 2 * math.pi / max(container_count, 1) + container_positions = {} + for idx, c in enumerate(containers): + node_id = f"container_{sanitize_id(c)}" + ip_infos = [entry for entry in data if entry['Container Name'] == c] + ip_texts = [f"IP: {info['IP Address']}, GW: {info['Gateway']}, Net: {info['Network']}" for info in ip_infos] + # Ermittle Watchtower-Status aus com.centurylinklabs.watchtower.enable + watchtower_status = "aktiviert" if any( + info.get('Watchtower Enabled', '').lower() in ['true', '1', 'yes', 'enabled'] + for info in ip_infos + ) else "deaktiviert" + label_text = f"{c}\nWatchtower: {watchtower_status}\n" + "\n".join(ip_texts) + node = SubElement(graph, 'node', id=node_id) + data_elem = SubElement(node, 'data', key="d0") + y_shape_node = SubElement(data_elem, '{http://www.yworks.com/xml/graphml}ShapeNode') + # Kreisförmige Position + angle = idx * angle_step + x = center_x + radius * math.cos(angle) + y = center_y + radius * math.sin(angle) + geometry = SubElement(y_shape_node, '{http://www.yworks.com/xml/graphml}Geometry', + x=str(x), y=str(y), width="200", height="60") + y_node_label = SubElement(y_shape_node, '{http://www.yworks.com/xml/graphml}NodeLabel') + y_node_label.text = label_text + watchtower_elem = SubElement(node, 'data', key="d1") + watchtower_elem.text = container_labels[c]['Watchtower Enabled'] + container_positions[c] = (x, y) + + edge_id = 0 + for entry in data: + source = f"container_{sanitize_id(entry['Container Name'])}" + target = f"network_{sanitize_id(entry['Network'])}" + edge = SubElement(graph, 'edge', id=f"e{edge_id}", source=source, target=target) + edge_id += 1 + + tree = ElementTree(graphml) + tree.write(filename, encoding='utf-8', xml_declaration=True) + print(f"[+] GraphML erfolgreich in {filename} gespeichert.") + +if __name__ == '__main__': + print("[*] Sammle Container-Informationen...") + container_data = get_container_info() + save_to_csv(container_data) + save_to_graphml(container_data) diff --git a/graphml/docker_container_info_V1.graphml b/graphml/docker_container_info_V1.graphml new file mode 100644 index 0000000..8209fc0 --- /dev/null +++ b/graphml/docker_container_info_V1.graphml @@ -0,0 +1,754 @@ + + + + + + + + + + + + + + + + + + + + + + + + seafile_seafile_net +seafile-mysql: IP: 172.25.0.2, GW: 172.25.0.1 +seafile: IP: 172.25.0.3, GW: 172.25.0.1 +seafile-memcached: IP: 172.25.0.4, GW: 172.25.0.1 + + + + + + + + + + + + watchtower_default +Watchtower: IP: 172.26.0.2, GW: 172.26.0.1 + + + + + + + + + + + + node-red_node-red-net +nodered: IP: 172.28.0.2, GW: 172.28.0.1 + + + + + + + + + + + + grafana_default +grafana: IP: 172.22.0.2, GW: 172.22.0.1 + + + + + + + + + + + + bridge +weave-scope: IP: 172.17.0.2, GW: 172.17.0.1 +traefik-1: IP: , GW: +HandBrake: IP: , GW: + + + + + + + + + + + + nextcloud_default +nextcloud-app: IP: , GW: +nextcloud-db: IP: , GW: +nextcloud-redis: IP: , GW: + + + + + + + + + + + + deconz_default +deconz: IP: 172.24.0.2, GW: 172.24.0.1 + + + + + + + + + + + + my_network +linkwarden-db: IP: 172.19.0.2, GW: 172.19.0.1 +linkwarden: IP: 172.19.0.5, GW: 172.19.0.1 +portainer: IP: 172.19.0.8, GW: 172.19.0.1 +gitlab: IP: 172.19.0.4, GW: 172.19.0.1 +grafana: IP: 172.19.0.6, GW: 172.19.0.1 +gitlab-registry: IP: 172.19.0.7, GW: 172.19.0.1 +Vaultwarden: IP: 172.19.0.9, GW: 172.19.0.1 +influxdb: IP: 172.19.0.3, GW: 172.19.0.1 +traefik: IP: 172.19.0.10, GW: 172.19.0.1 +seafile: IP: 172.19.0.11, GW: 172.19.0.1 + + + + + + + + + + + + gitlab_system +gitlab: IP: 172.30.0.3, GW: 172.30.0.1 +gitlab-db: IP: 172.30.0.2, GW: 172.30.0.1 +gitlab-registry: IP: 172.30.0.4, GW: 172.30.0.1 + + + + + + + + + + + + linkwarden +IP: 172.19.0.5, GW: 172.19.0.1, Net: my_network + + + + + + + + + + + + + traefik +IP: 172.19.0.10, GW: 172.19.0.1, Net: my_network + + + + + + + + + + + + + nextcloud-db +IP: , GW: , Net: nextcloud_default + + + + + + + + + + + + + gitlab-db +IP: 172.30.0.2, GW: 172.30.0.1, Net: gitlab_system + + + + + + + + + + + + + deconz +IP: 172.24.0.2, GW: 172.24.0.1, Net: deconz_default + + + + + + + + + + + + + gitlab +IP: 172.30.0.3, GW: 172.30.0.1, Net: gitlab_system +IP: 172.19.0.4, GW: 172.19.0.1, Net: my_network + + + + + + + + + + + + + gitlab-registry +IP: 172.30.0.4, GW: 172.30.0.1, Net: gitlab_system +IP: 172.19.0.7, GW: 172.19.0.1, Net: my_network + + + + + + + + + + + + + influxdb +IP: 172.19.0.3, GW: 172.19.0.1, Net: my_network + + + + + + + + + + + + + traefik-1 +IP: , GW: , Net: bridge + + + + + + + + + + + + + Watchtower +IP: 172.26.0.2, GW: 172.26.0.1, Net: watchtower_default + + + + + + + + + + + + + linkwarden-db +IP: 172.19.0.2, GW: 172.19.0.1, Net: my_network + + + + + + + + + + + + + weave-scope +IP: 172.17.0.2, GW: 172.17.0.1, Net: bridge + + + + + + + + + + + + + Vaultwarden +IP: 172.19.0.9, GW: 172.19.0.1, Net: my_network + + + + + + + + + + + + + nodered +IP: 172.28.0.2, GW: 172.28.0.1, Net: node-red_node-red-net + + + + + + + + + + + + + nextcloud-redis +IP: , GW: , Net: nextcloud_default + + + + + + + + + + + + + seafile-mysql +IP: 172.25.0.2, GW: 172.25.0.1, Net: seafile_seafile_net + + + + + + + + + + + + + HandBrake +IP: , GW: , Net: bridge + + + + + + + + + + + + + seafile-memcached +IP: 172.25.0.4, GW: 172.25.0.1, Net: seafile_seafile_net + + + + + + + + + + + + + portainer +IP: 172.19.0.8, GW: 172.19.0.1, Net: my_network + + + + + + + + + + + + + seafile +IP: 172.19.0.11, GW: 172.19.0.1, Net: my_network +IP: 172.25.0.3, GW: 172.25.0.1, Net: seafile_seafile_net + + + + + + + + + + + + + nextcloud-app +IP: , GW: , Net: nextcloud_default + + + + + + + + + + + + + grafana +IP: 172.22.0.2, GW: 172.22.0.1, Net: grafana_default +IP: 172.19.0.6, GW: 172.19.0.1, Net: my_network + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/graphml/docker_container_info_V2.graphml b/graphml/docker_container_info_V2.graphml new file mode 100644 index 0000000..8716fb8 --- /dev/null +++ b/graphml/docker_container_info_V2.graphml @@ -0,0 +1,774 @@ + + + + + + + + + + + + + + + + + + + + + + + + seafile_seafile_net +seafile-mysql: IP: 172.25.0.2, GW: 172.25.0.1 +seafile: IP: 172.25.0.3, GW: 172.25.0.1 +seafile-memcached: IP: 172.25.0.4, GW: 172.25.0.1 + + + + + + + + + + + + watchtower_default +Watchtower: IP: 172.26.0.2, GW: 172.26.0.1 + + + + + + + + + + + + my_network +linkwarden-db: IP: 172.19.0.2, GW: 172.19.0.1 +linkwarden: IP: 172.19.0.5, GW: 172.19.0.1 +portainer: IP: 172.19.0.8, GW: 172.19.0.1 +gitlab: IP: 172.19.0.4, GW: 172.19.0.1 +grafana: IP: 172.19.0.6, GW: 172.19.0.1 +gitlab-registry: IP: 172.19.0.7, GW: 172.19.0.1 +Vaultwarden: IP: 172.19.0.9, GW: 172.19.0.1 +influxdb: IP: 172.19.0.3, GW: 172.19.0.1 +traefik: IP: 172.19.0.10, GW: 172.19.0.1 +seafile: IP: 172.19.0.11, GW: 172.19.0.1 + + + + + + + + + + + + gitlab_system +gitlab: IP: 172.30.0.3, GW: 172.30.0.1 +gitlab-db: IP: 172.30.0.2, GW: 172.30.0.1 +gitlab-registry: IP: 172.30.0.4, GW: 172.30.0.1 + + + + + + + + + + + + bridge +weave-scope: IP: 172.17.0.2, GW: 172.17.0.1 +traefik-1: IP: , GW: +HandBrake: IP: , GW: + + + + + + + + + + + + grafana_default +grafana: IP: 172.22.0.2, GW: 172.22.0.1 + + + + + + + + + + + + deconz_default +deconz: IP: 172.24.0.2, GW: 172.24.0.1 + + + + + + + + + + + + nextcloud_default +nextcloud-app: IP: , GW: +nextcloud-db: IP: , GW: +nextcloud-redis: IP: , GW: + + + + + + + + + + + + node-red_node-red-net +nodered: IP: 172.28.0.2, GW: 172.28.0.1 + + + + + + + + + + + + linkwarden +Watchtower: not set +IP: 172.19.0.5, GW: 172.19.0.1, Net: my_network + + + + + + + + + + + + + influxdb +Watchtower: not set +IP: 172.19.0.3, GW: 172.19.0.1, Net: my_network + + + + + + + + + + + + + portainer +Watchtower: not set +IP: 172.19.0.8, GW: 172.19.0.1, Net: my_network + + + + + + + + + + + + + nextcloud-db +Watchtower: not set +IP: , GW: , Net: nextcloud_default + + + + + + + + + + + + + nextcloud-app +Watchtower: not set +IP: , GW: , Net: nextcloud_default + + + + + + + + + + + + + seafile-memcached +Watchtower: not set +IP: 172.25.0.4, GW: 172.25.0.1, Net: seafile_seafile_net + + + + + + + + + + + + + HandBrake +Watchtower: not set +IP: , GW: , Net: bridge + + + + + + + + + + + + + gitlab-db +Watchtower: not set +IP: 172.30.0.2, GW: 172.30.0.1, Net: gitlab_system + + + + + + + + + + + + + Vaultwarden +Watchtower: not set +IP: 172.19.0.9, GW: 172.19.0.1, Net: my_network + + + + + + + + + + + + + deconz +Watchtower: not set +IP: 172.24.0.2, GW: 172.24.0.1, Net: deconz_default + + + + + + + + + + + + + gitlab-registry +Watchtower: not set +IP: 172.30.0.4, GW: 172.30.0.1, Net: gitlab_system +IP: 172.19.0.7, GW: 172.19.0.1, Net: my_network + + + + + + + + + + + + + Watchtower +Watchtower: not set +IP: 172.26.0.2, GW: 172.26.0.1, Net: watchtower_default + + + + + + + + + + + + + nodered +Watchtower: not set +IP: 172.28.0.2, GW: 172.28.0.1, Net: node-red_node-red-net + + + + + + + + + + + + + traefik-1 +Watchtower: not set +IP: , GW: , Net: bridge + + + + + + + + + + + + + nextcloud-redis +Watchtower: not set +IP: , GW: , Net: nextcloud_default + + + + + + + + + + + + + gitlab +Watchtower: not set +IP: 172.30.0.3, GW: 172.30.0.1, Net: gitlab_system +IP: 172.19.0.4, GW: 172.19.0.1, Net: my_network + + + + + + + + + + + + + weave-scope +Watchtower: not set +IP: 172.17.0.2, GW: 172.17.0.1, Net: bridge + + + + + + + + + + + + + traefik +Watchtower: not set +IP: 172.19.0.10, GW: 172.19.0.1, Net: my_network + + + + + + + + + + + + + seafile +Watchtower: not set +IP: 172.19.0.11, GW: 172.19.0.1, Net: my_network +IP: 172.25.0.3, GW: 172.25.0.1, Net: seafile_seafile_net + + + + + + + + + + + + + grafana +Watchtower: not set +IP: 172.22.0.2, GW: 172.22.0.1, Net: grafana_default +IP: 172.19.0.6, GW: 172.19.0.1, Net: my_network + + + + + + + + + + + + + seafile-mysql +Watchtower: not set +IP: 172.25.0.2, GW: 172.25.0.1, Net: seafile_seafile_net + + + + + + + + + + + + + linkwarden-db +Watchtower: not set +IP: 172.19.0.2, GW: 172.19.0.1, Net: my_network + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/graphml/docker_container_info_V3.graphml b/graphml/docker_container_info_V3.graphml new file mode 100644 index 0000000..8d939d6 --- /dev/null +++ b/graphml/docker_container_info_V3.graphml @@ -0,0 +1,774 @@ + + + + + + + + + + + + + + + + + + + + + + + + nextcloud_default +nextcloud-app: IP: , GW: +nextcloud-db: IP: , GW: +nextcloud-redis: IP: , GW: + + + + + + + + + + + + node-red_node-red-net +nodered: IP: 172.28.0.2, GW: 172.28.0.1 + + + + + + + + + + + + my_network +linkwarden-db: IP: 172.19.0.2, GW: 172.19.0.1 +linkwarden: IP: 172.19.0.5, GW: 172.19.0.1 +portainer: IP: 172.19.0.8, GW: 172.19.0.1 +gitlab: IP: 172.19.0.4, GW: 172.19.0.1 +grafana: IP: 172.19.0.6, GW: 172.19.0.1 +gitlab-registry: IP: 172.19.0.7, GW: 172.19.0.1 +Vaultwarden: IP: 172.19.0.9, GW: 172.19.0.1 +influxdb: IP: 172.19.0.3, GW: 172.19.0.1 +traefik: IP: 172.19.0.10, GW: 172.19.0.1 +seafile: IP: 172.19.0.11, GW: 172.19.0.1 + + + + + + + + + + + + bridge +weave-scope: IP: 172.17.0.2, GW: 172.17.0.1 +traefik-1: IP: , GW: +HandBrake: IP: , GW: + + + + + + + + + + + + gitlab_system +gitlab: IP: 172.30.0.3, GW: 172.30.0.1 +gitlab-db: IP: 172.30.0.2, GW: 172.30.0.1 +gitlab-registry: IP: 172.30.0.4, GW: 172.30.0.1 + + + + + + + + + + + + grafana_default +grafana: IP: 172.22.0.2, GW: 172.22.0.1 + + + + + + + + + + + + seafile_seafile_net +seafile-mysql: IP: 172.25.0.2, GW: 172.25.0.1 +seafile: IP: 172.25.0.3, GW: 172.25.0.1 +seafile-memcached: IP: 172.25.0.4, GW: 172.25.0.1 + + + + + + + + + + + + watchtower_default +Watchtower: IP: 172.26.0.2, GW: 172.26.0.1 + + + + + + + + + + + + deconz_default +deconz: IP: 172.24.0.2, GW: 172.24.0.1 + + + + + + + + + + + + influxdb +Watchtower: deaktiviert +IP: 172.19.0.3, GW: 172.19.0.1, Net: my_network + + + + + + + + + + + + + grafana +Watchtower: aktiviert +IP: 172.22.0.2, GW: 172.22.0.1, Net: grafana_default +IP: 172.19.0.6, GW: 172.19.0.1, Net: my_network + + + + + + + + + + + + + portainer +Watchtower: aktiviert +IP: 172.19.0.8, GW: 172.19.0.1, Net: my_network + + + + + + + + + + + + + nextcloud-redis +Watchtower: deaktiviert +IP: , GW: , Net: nextcloud_default + + + + + + + + + + + + + nodered +Watchtower: aktiviert +IP: 172.28.0.2, GW: 172.28.0.1, Net: node-red_node-red-net + + + + + + + + + + + + + HandBrake +Watchtower: deaktiviert +IP: , GW: , Net: bridge + + + + + + + + + + + + + seafile-memcached +Watchtower: deaktiviert +IP: 172.25.0.4, GW: 172.25.0.1, Net: seafile_seafile_net + + + + + + + + + + + + + traefik-1 +Watchtower: deaktiviert +IP: , GW: , Net: bridge + + + + + + + + + + + + + gitlab-registry +Watchtower: aktiviert +IP: 172.30.0.4, GW: 172.30.0.1, Net: gitlab_system +IP: 172.19.0.7, GW: 172.19.0.1, Net: my_network + + + + + + + + + + + + + nextcloud-app +Watchtower: deaktiviert +IP: , GW: , Net: nextcloud_default + + + + + + + + + + + + + nextcloud-db +Watchtower: deaktiviert +IP: , GW: , Net: nextcloud_default + + + + + + + + + + + + + Vaultwarden +Watchtower: deaktiviert +IP: 172.19.0.9, GW: 172.19.0.1, Net: my_network + + + + + + + + + + + + + deconz +Watchtower: deaktiviert +IP: 172.24.0.2, GW: 172.24.0.1, Net: deconz_default + + + + + + + + + + + + + traefik +Watchtower: deaktiviert +IP: 172.19.0.10, GW: 172.19.0.1, Net: my_network + + + + + + + + + + + + + seafile +Watchtower: deaktiviert +IP: 172.19.0.11, GW: 172.19.0.1, Net: my_network +IP: 172.25.0.3, GW: 172.25.0.1, Net: seafile_seafile_net + + + + + + + + + + + + + Watchtower +Watchtower: deaktiviert +IP: 172.26.0.2, GW: 172.26.0.1, Net: watchtower_default + + + + + + + + + + + + + seafile-mysql +Watchtower: deaktiviert +IP: 172.25.0.2, GW: 172.25.0.1, Net: seafile_seafile_net + + + + + + + + + + + + + gitlab-db +Watchtower: aktiviert +IP: 172.30.0.2, GW: 172.30.0.1, Net: gitlab_system + + + + + + + + + + + + + gitlab +Watchtower: aktiviert +IP: 172.30.0.3, GW: 172.30.0.1, Net: gitlab_system +IP: 172.19.0.4, GW: 172.19.0.1, Net: my_network + + + + + + + + + + + + + linkwarden +Watchtower: aktiviert +IP: 172.19.0.5, GW: 172.19.0.1, Net: my_network + + + + + + + + + + + + + weave-scope +Watchtower: deaktiviert +IP: 172.17.0.2, GW: 172.17.0.1, Net: bridge + + + + + + + + + + + + + linkwarden-db +Watchtower: aktiviert +IP: 172.19.0.2, GW: 172.19.0.1, Net: my_network + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +