Merge pull request 'interactive' (#4) from interactive into main

Reviewed-on: #4
This commit was merged in pull request #4.
This commit is contained in:
2026-02-22 21:29:05 +00:00
2 changed files with 205 additions and 51 deletions

View File

@@ -4,7 +4,19 @@ Ein Bash-Script zur Verwaltung und Analyse von Docker-Netzwerken.
## Beschreibung
**Dockernet Inspector** hilft bei der täglichen Arbeit mit Docker-Netzwerken und bietet vier Hauptfunktionen:
**Dockernet Inspector** hilft bei der täglichen Arbeit mit Docker-Netzwerken durch zwei Nutzungsmodi:
**Interaktiver Modus (Menü):**
- Benutzerfreundliches Menü ohne Kommandozeilenargumente
- Intuitive Netzwerk-Auswahl aus einer Liste
- Fehlerbehandlung bei ungültigen Eingaben
**Kommandozeilen-Modus (CLI):**
- Schnelle automatisierte Abfragen
- Scripting-freundlich
- Rückwärtskompatibel
Das Script bietet vier Hauptfunktionen:
1. Alle Netzwerke auflisten
2. Netzwerk-Details inspizieren
@@ -33,7 +45,22 @@ chmod +x dockernet-inspector.v1.sh
## Verwendung
### Syntax
Das Script kann auf zwei Arten verwendet werden:
### 1. Interaktiver Modus (Menü)
```bash
bash ./dockernet-inspector.v1.sh
```
Das Script startet dann ein interaktives Menü, über das Sie folgende Optionen wählen können:
- **1** - Alle Netzwerke auflisten
- **2** - Detaillierte Infos zu einem Netzwerk (mit Netzwerk-Auswahl)
- **3** - IPs eines Netzwerks anzeigen (mit Netzwerk-Auswahl)
- **4** - Alle belegten IPs anzeigen
- **0** - Beenden
### 2. Kommandozeilen-Modus (CLI)
```bash
bash ./dockernet-inspector.v1.sh [BEFEHL] [OPTIONEN]
@@ -43,6 +70,7 @@ bash ./dockernet-inspector.v1.sh [BEFEHL] [OPTIONEN]
| Befehl | Beschreibung |
|--------|--------------|
| *(keine)* | Startet interaktiven Modus |
| `networks` | Listet alle verfügbaren Docker-Netzwerke auf |
| `inspect <netzwerk>` | Zeigt detaillierte Informationen zu einem Netzwerk |
| `ips <netzwerk>` | Zeigt alle belegten IPv4-Adressen im angegebenen Netzwerk |
@@ -52,6 +80,30 @@ bash ./dockernet-inspector.v1.sh [BEFEHL] [OPTIONEN]
### Beispiele
#### Interaktiver Modus
```bash
# Interaktives Menü starten
bash ./dockernet-inspector.v1.sh
# Output:
# ================================================================================
# Dockernet Inspector - Interaktives Menü
# ================================================================================
#
# 1. Alle Netzwerke auflisten
# 2. Detaillierte Infos zu einem Netzwerk
# 3. IPs eines Netzwerks anzeigen
# 4. Alle belegten IPs anzeigen
# 0. Beenden
#
# Bitte waehlen Sie eine Option (0-4):
```
Im Menü können Sie einfach die Nummer eingeben. Bei den Optionen 2 und 3 werden Sie aufgefordert, ein Netzwerk aus einer Liste zu wählen.
#### Kommandozeilen-Modus
```bash
# Alle Docker-Netzwerke auflisten
bash ./dockernet-inspector.v1.sh networks
@@ -122,12 +174,18 @@ matrixnetwork matrix-synapse-db 172.19.0.11
Das Script gibt unter anderem folgende Fehlermeldungen aus:
- Kein Befehl angegeben: `Fehler: Befehl erforderlich. Verwendung: $0 networks|inspect|ips|ips-all|help`
**CLI-Modus:**
- Keine Netzwerk-Angabe bei `inspect`: `Fehler: Netzwerkname erforderlich. Verwendung: $0 inspect <docker-network-name>`
- Keine Netzwerk-Angabe bei `ips`: `Fehler: Netzwerkname erforderlich. Verwendung: $0 ips <docker-network-name>`
- Netzwerk nicht gefunden: `Fehler: Netzwerk '<name>' nicht gefunden.`
- Docker-Netzwerke konnten nicht abgerufen werden: `Fehler: Docker Netzwerke konnten nicht abgerufen werden.`
**Interaktiver Modus:**
- Ungültige Eingabe: `FEHLER: Ungueltige Eingabe. Bitte geben Sie eine Nummer zwischen 0 und 4 ein.`
- Keine Netzwerke vorhanden: `Fehler: Keine Docker Netzwerke gefunden.`
Das Script unterstützt auch Fehlerbehandlung bei ungültigen Eingaben und ermöglicht dem Nutzer, die Eingabe zu korrigieren, ohne dass das Script abstürzt.
## Voraussetzungen
- Docker ist installiert und läuft

View File

@@ -15,14 +15,15 @@
# Autor: Patrick Asmus
# Web: https://www.cleveradmin.de
# Git-Reposit.: https://git.techniverse.net/scriptos/dockernet-inspector.git
# Version: 1.2.0
# Datum: 18.02.2026
# Modifikation: IP-Listen pro Netzwerk und netzwerkuebergreifend hinzugefuegt
# Version: 1.3.0
# Datum: 22.02.2026
# Modifikation: Ineraktives Menü hinzugefügt, Fehlerbehandlung verbessert, Ausgabe formatiert, Kompatibilität erweitert
#####################################################
set -euo pipefail
set -uo pipefail
TABLE_LINE_WIDTH=80
INTERACTIVE_MODE=false
print_rule() {
local char="$1"
@@ -41,6 +42,7 @@ show_help() {
Dockernet Inspector v1.2.0 - Docker Netzwerk Verwaltungstool
VERWENDUNG:
$0 - Interaktiver Modus (Menü)
$0 networks - Alle Docker Netzwerke auflisten
$0 inspect <netzwerk> - Details zu einem Netzwerk anzeigen
$0 ips <netzwerk> - Belegte IPs in einem Netzwerk anzeigen
@@ -155,47 +157,94 @@ list_ips_all_networks() {
print_dynamic_table "$table_data"
}
# Argument-Verarbeitung
COMMAND="${1:-}"
case "$COMMAND" in
networks)
# Interaktive Menü-Funktion
interactive_menu() {
while true; do
echo ""
print_rule "="
echo "Dockernet Inspector - Interaktives Menü"
print_rule "="
echo ""
echo "1. Alle Netzwerke auflisten"
echo "2. Detaillierte Infos zu einem Netzwerk"
echo "3. IPs eines Netzwerks anzeigen"
echo "4. Alle belegten IPs anzeigen"
echo "0. Beenden"
echo ""
read -p "Bitte waehlen Sie eine Option (0-4): " choice
echo ""
case "$choice" in
1)
list_networks
exit 0
;;
ips)
NET="${2:-}"
[[ -z "$NET" ]] && { echo "Fehler: Netzwerkname erforderlich. Verwendung: $0 ips <docker-network-name>"; exit 1; }
list_ips_in_network "$NET"
exit 0
2)
if select_and_inspect_network; then
:
fi
;;
ips-all)
3)
nets="$(docker network ls --format '{{.Name}}' 2>/dev/null || true)"
if [[ -z "$nets" ]]; then
echo "Fehler: Keine Docker Netzwerke gefunden."
continue
fi
echo "Verfuegbare Netzwerke:"
select net in $nets; do
if [[ -n "$net" ]]; then
list_ips_in_network "$net"
break
else
echo "Ungueltige Auswahl. Bitte versuchen Sie es erneut."
fi
done
;;
4)
list_ips_all_networks
;;
0)
echo "Auf Wiedersehen!"
exit 0
;;
help | -h | --help)
show_help
exit 0
;;
inspect)
NET="${2:-}"
[[ -z "$NET" ]] && { echo "Fehler: Netzwerkname erforderlich. Verwendung: $0 inspect <docker-network-name>"; exit 1; }
;;
"")
echo "Fehler: Befehl erforderlich. Verwendung: $0 networks|inspect|ips|ips-all|help"
exit 1
;;
*)
# Kompatibilitaet: Wenn erstes Argument kein bekannter Befehl ist, behandle es als Netzwerkname
NET="$COMMAND"
echo "FEHLER: Ungueltige Eingabe '$choice'. Bitte geben Sie eine Nummer zwischen 0 und 4 ein."
sleep 1
;;
esac
done
}
# Hauptlogik fuer die Inspektion eines Netzwerks
[[ -z "${NET:-}" ]] && { echo "Fehler: Netzwerkname erforderlich. Verwendung: $0 <docker-network-name>"; exit 1; }
# Funktion zur Auswahl und Inspektion eines Netzwerks
select_and_inspect_network() {
local nets net
nets="$(docker network ls --format '{{.Name}}' 2>/dev/null || true)"
if [[ -z "$nets" ]]; then
echo "Fehler: Keine Docker Netzwerke gefunden."
return 1
fi
echo "Verfuegbare Netzwerke:"
select net in $nets; do
if [[ -n "$net" ]]; then
NET="$net"
inspect_network "$NET"
return 0
else
echo "Ungueltige Auswahl. Bitte versuchen Sie es erneut."
fi
done
}
# Separate Funktion fuer Netzwerk-Inspektion
inspect_network() {
local NET="$1"
# 1) Netzwerk-ID und Bridge-Name separat holen
local ID BR_RAW IF SUBNET GATEWAY state rxb txb rxp txp
ID="$(docker network inspect "$NET" --format '{{.Id}}' 2>/dev/null || true)"
[[ -z "$ID" ]] && { echo "Fehler: Netzwerk '$NET' nicht gefunden."; exit 2; }
[[ -z "$ID" ]] && { echo "Fehler: Netzwerk '$NET' nicht gefunden."; return 2; }
BR_RAW="$(docker network inspect "$NET" --format '{{index .Options "com.docker.network.bridge.name"}}' 2>/dev/null || true)"
@@ -222,6 +271,11 @@ else
echo "WARN: Interface $IF existiert (noch) nicht auf dem Host."
fi
echo ""
print_rule "="
echo "Detaillerte Informationen fuer Netzwerk: $NET"
print_rule "="
echo ""
cat <<OUT
Docker-Netzwerk : $NET
Driver : $(docker network inspect "$NET" --format '{{.Driver}}')
@@ -231,3 +285,45 @@ OperState : $state
RX bytes/packets : $rxb / $rxp
TX bytes/packets : $txb / $txp
OUT
echo ""
}
# Argument-Verarbeitung
COMMAND="${1:-}"
case "$COMMAND" in
networks)
list_networks
exit 0
;;
ips)
NET="${2:-}"
[[ -z "$NET" ]] && { echo "Fehler: Netzwerkname erforderlich. Verwendung: $0 ips <docker-network-name>"; exit 1; }
list_ips_in_network "$NET"
exit 0
;;
ips-all)
list_ips_all_networks
exit 0
;;
help | -h | --help)
show_help
exit 0
;;
inspect)
NET="${2:-}"
[[ -z "$NET" ]] && { echo "Fehler: Netzwerkname erforderlich. Verwendung: $0 inspect <docker-network-name>"; exit 1; }
inspect_network "$NET"
exit 0
;;
"")
# Starte interaktiven Modus, wenn keine Argumente uebergeben wurden
interactive_menu
exit 0
;;
*)
# Kompatibilitaet: Wenn erstes Argument kein bekannter Befehl ist, behandle es als Netzwerkname
NET="$COMMAND"
inspect_network "$NET"
exit 0
;;
esac