Merge pull request 'release/v1.4.0' (#5) from release/v1.4.0 into main
Reviewed-on: #5
This commit was merged in pull request #5.
This commit is contained in:
196
README.md
196
README.md
@@ -2,202 +2,16 @@
|
|||||||
|
|
||||||
Ein Bash-Script zur Verwaltung und Analyse von Docker-Netzwerken.
|
Ein Bash-Script zur Verwaltung und Analyse von Docker-Netzwerken.
|
||||||
|
|
||||||
## Beschreibung
|
Weitere Informationen in der [Dokumentation](docs/README.md).
|
||||||
|
|
||||||
**Dockernet Inspector** hilft bei der täglichen Arbeit mit Docker-Netzwerken durch zwei Nutzungsmodi:
|
## Schnellstart
|
||||||
|
|
||||||
**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
|
|
||||||
3. Belegte IPs pro Netzwerk anzeigen
|
|
||||||
4. Belegte IPs in allen Netzwerken anzeigen (aufsteigend sortiert)
|
|
||||||
|
|
||||||
Beim Inspizieren eines Netzwerks werden u. a. folgende Informationen angezeigt:
|
|
||||||
- Netzwerk-Driver (bridge, overlay, host, ...)
|
|
||||||
- Bridge-Interface auf dem Host
|
|
||||||
- Subnet und Gateway
|
|
||||||
- Interface-Status (operstate)
|
|
||||||
- RX/TX Netzwerk-Statistiken
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
1. Repository klonen:
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://git.techniverse.net/scriptos/dockernet-inspector.git
|
git clone https://git.techniverse.net/scriptos/dockernet-inspector.git
|
||||||
cd dockernet-inspector
|
cd dockernet-inspector
|
||||||
```
|
|
||||||
|
|
||||||
2. Script ausführbar machen:
|
|
||||||
```bash
|
|
||||||
chmod +x dockernet-inspector.v1.sh
|
chmod +x dockernet-inspector.v1.sh
|
||||||
```
|
|
||||||
|
|
||||||
## Verwendung
|
|
||||||
|
|
||||||
Das Script kann auf zwei Arten verwendet werden:
|
|
||||||
|
|
||||||
### 1. Interaktiver Modus (Menü)
|
|
||||||
|
|
||||||
```bash
|
|
||||||
bash ./dockernet-inspector.v1.sh
|
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]
|
|
||||||
```
|
|
||||||
|
|
||||||
### Verfügbare Befehle
|
|
||||||
|
|
||||||
| 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 |
|
|
||||||
| `ips-all` | Zeigt alle belegten IPv4-Adressen in allen Docker-Netzwerken (aufsteigend) |
|
|
||||||
| `<netzwerk>` | Alias für `inspect <netzwerk>` (Rückwärtskompatibilität) |
|
|
||||||
| `help`, `-h`, `--help` | Zeigt die Hilfe an |
|
|
||||||
|
|
||||||
### 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
|
|
||||||
|
|
||||||
# Netzwerk analysieren (explizit)
|
|
||||||
bash ./dockernet-inspector.v1.sh inspect bridge
|
|
||||||
|
|
||||||
# Netzwerk analysieren (Alias)
|
|
||||||
bash ./dockernet-inspector.v1.sh my-custom-network
|
|
||||||
|
|
||||||
# Belegte IPs eines Netzwerks
|
|
||||||
bash ./dockernet-inspector.v1.sh ips dockernet
|
|
||||||
|
|
||||||
# Belegte IPs in allen Netzwerken
|
|
||||||
bash ./dockernet-inspector.v1.sh ips-all
|
|
||||||
|
|
||||||
# Hilfe
|
|
||||||
bash ./dockernet-inspector.v1.sh help
|
|
||||||
```
|
|
||||||
|
|
||||||
## Ausgabe-Beispiele
|
|
||||||
|
|
||||||
### `networks`
|
|
||||||
|
|
||||||
```text
|
|
||||||
Verfügbare Docker Netzwerke:
|
|
||||||
==============================
|
|
||||||
ID NAME DRIVER SCOPE
|
|
||||||
abcd1234efgh5678ijkl9012 bridge bridge local
|
|
||||||
mnop4567qrst8901uvwx2345 host host local
|
|
||||||
yzab3456cdef7890ghij1234 mynet bridge local
|
|
||||||
```
|
|
||||||
|
|
||||||
### `inspect`
|
|
||||||
|
|
||||||
```text
|
|
||||||
Docker-Netzwerk : my-network
|
|
||||||
Driver : bridge
|
|
||||||
Bridge-Interface : br-1234567890ab
|
|
||||||
Subnet/Gateway : 172.18.0.0/16 / 172.18.0.1
|
|
||||||
OperState : up
|
|
||||||
RX bytes/packets : 123456 / 789
|
|
||||||
TX bytes/packets : 654321 / 456
|
|
||||||
```
|
|
||||||
|
|
||||||
### `ips`
|
|
||||||
|
|
||||||
```text
|
|
||||||
Belegte IP-Adressen im Netzwerk 'dockernet':
|
|
||||||
========================================
|
|
||||||
CONTAINER IP
|
|
||||||
dozzle 172.16.0.95
|
|
||||||
grafana 172.16.0.129
|
|
||||||
```
|
|
||||||
|
|
||||||
### `ips-all`
|
|
||||||
|
|
||||||
```text
|
|
||||||
Belegte IP-Adressen in allen Netzwerken (aufsteigend):
|
|
||||||
=======================================================
|
|
||||||
NETZWERK CONTAINER IP
|
|
||||||
dockernet dozzle 172.16.0.95
|
|
||||||
datagerry.dockernetwork.local datagerry-nginx 172.16.14.10
|
|
||||||
matrixnetwork matrix-synapse-db 172.19.0.11
|
|
||||||
```
|
|
||||||
|
|
||||||
## Fehlerbehandlung
|
|
||||||
|
|
||||||
Das Script gibt unter anderem folgende Fehlermeldungen aus:
|
|
||||||
|
|
||||||
**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
|
|
||||||
- Bash (Version 4+ empfohlen)
|
|
||||||
- Linux-Host (für `/sys/class/net/` beim `inspect`-Befehl)
|
|
||||||
|
|
||||||
## Technische Details
|
|
||||||
|
|
||||||
Das Script nutzt:
|
|
||||||
- `docker network ls` und `docker network inspect`
|
|
||||||
- `sort -V` für natürliche IP-Sortierung
|
|
||||||
- `column -t -s $'\t'` für dynamisch ausgerichtete Tabellen
|
|
||||||
- `set -euo pipefail` für robuste Script-Ausführung
|
- `set -euo pipefail` für robuste Script-Ausführung
|
||||||
|
|
||||||
## Lizenz
|
## Lizenz
|
||||||
@@ -212,6 +26,6 @@ Siehe [LICENSE](./LICENSE).
|
|||||||
|
|
||||||
## Version
|
## Version
|
||||||
|
|
||||||
- **Version:** 1.2.0
|
- **Version:** 1.4.0
|
||||||
- **Datum:** 18.02.2026
|
- **Datum:** 10.04.2026
|
||||||
- **Modifikation:** IP-Listen pro Netzwerk und netzwerkübergreifend hinzugefügt
|
- **Modifikation:** Befehl `unused-networks` hinzugefügt, interaktives Menü um Option 5 erweitert
|
||||||
|
|||||||
@@ -5,19 +5,24 @@
|
|||||||
# - Alle Netzwerke auflisten
|
# - Alle Netzwerke auflisten
|
||||||
# - Details zu einem spezifischen Docker-Netzwerk anzeigen
|
# - Details zu einem spezifischen Docker-Netzwerk anzeigen
|
||||||
# - Belegte IPs je Netzwerk und netzwerkuebergreifend ausgeben
|
# - Belegte IPs je Netzwerk und netzwerkuebergreifend ausgeben
|
||||||
|
# - Ungenutzte Netzwerke (ohne Container) anzeigen
|
||||||
|
# - Netzwerke interaktiv auswaehlen und loeschen
|
||||||
# Verwendung: bash ./dockernet-inspector.v1.sh [BEFEHL] [OPTIONS]
|
# Verwendung: bash ./dockernet-inspector.v1.sh [BEFEHL] [OPTIONS]
|
||||||
# Befehle:
|
# Befehle:
|
||||||
# networks - Alle Docker Netzwerke auflisten
|
# networks - Alle Docker Netzwerke auflisten
|
||||||
# inspect - Details zu einem Netzwerk anzeigen (Standard)
|
# inspect - Details zu einem Netzwerk anzeigen (Standard)
|
||||||
# ips - Belegte IPs in einem Netzwerk
|
# ips - Belegte IPs in einem Netzwerk
|
||||||
# ips-all - Belegte IPs in allen Netzwerken
|
# ips-all - Belegte IPs in allen Netzwerken
|
||||||
|
# unused-networks - Netzwerke ohne verbundene Container
|
||||||
|
# delete-networks - Netzwerke interaktiv auswaehlen und loeschen
|
||||||
# help, -h, --help - Diese Hilfe anzeigen
|
# help, -h, --help - Diese Hilfe anzeigen
|
||||||
# Autor: Patrick Asmus
|
# Autor: Patrick Asmus
|
||||||
# Web: https://www.cleveradmin.de
|
# Web: https://www.cleveradmin.de
|
||||||
# Git-Reposit.: https://git.techniverse.net/scriptos/dockernet-inspector.git
|
# Git-Reposit.: https://git.techniverse.net/scriptos/dockernet-inspector.git
|
||||||
# Version: 1.3.0
|
# Version: 1.6.0
|
||||||
# Datum: 22.02.2026
|
# Datum: 10.04.2026
|
||||||
# Modifikation: Ineraktives Menü hinzugefügt, Fehlerbehandlung verbessert, Ausgabe formatiert, Kompatibilität erweitert
|
# Modifikation: Schutz fuer Docker-Standardnetzwerke (bridge, host, none) hinzugefuegt;
|
||||||
|
# Detailansicht zeigt Hinweis statt Bridge-Daten, Loeschen wird blockiert
|
||||||
#####################################################
|
#####################################################
|
||||||
|
|
||||||
set -uo pipefail
|
set -uo pipefail
|
||||||
@@ -39,7 +44,7 @@ print_table_title() {
|
|||||||
# Hilfe-Funktion
|
# Hilfe-Funktion
|
||||||
show_help() {
|
show_help() {
|
||||||
cat <<HELP
|
cat <<HELP
|
||||||
Dockernet Inspector v1.2.0 - Docker Netzwerk Verwaltungstool
|
Dockernet Inspector v1.6.0 - Docker Netzwerk Verwaltungstool
|
||||||
|
|
||||||
VERWENDUNG:
|
VERWENDUNG:
|
||||||
$0 - Interaktiver Modus (Menü)
|
$0 - Interaktiver Modus (Menü)
|
||||||
@@ -47,6 +52,8 @@ VERWENDUNG:
|
|||||||
$0 inspect <netzwerk> - Details zu einem Netzwerk anzeigen
|
$0 inspect <netzwerk> - Details zu einem Netzwerk anzeigen
|
||||||
$0 ips <netzwerk> - Belegte IPs in einem Netzwerk anzeigen
|
$0 ips <netzwerk> - Belegte IPs in einem Netzwerk anzeigen
|
||||||
$0 ips-all - Belegte IPs in allen Netzwerken anzeigen
|
$0 ips-all - Belegte IPs in allen Netzwerken anzeigen
|
||||||
|
$0 unused-networks - Ungenutzte Netzwerke (ohne Container) anzeigen
|
||||||
|
$0 delete-networks - Netzwerke interaktiv auswaehlen und loeschen
|
||||||
$0 <netzwerk> - Alias fuer 'inspect <netzwerk>'
|
$0 <netzwerk> - Alias fuer 'inspect <netzwerk>'
|
||||||
$0 help - Diese Hilfe anzeigen
|
$0 help - Diese Hilfe anzeigen
|
||||||
|
|
||||||
@@ -54,6 +61,9 @@ BEFEHLE:
|
|||||||
networks Listet alle verfuegbaren Docker Netzwerke auf
|
networks Listet alle verfuegbaren Docker Netzwerke auf
|
||||||
ips <netzwerk> Zeigt Containername und IPv4-Adresse im angegebenen Netzwerk
|
ips <netzwerk> Zeigt Containername und IPv4-Adresse im angegebenen Netzwerk
|
||||||
ips-all Zeigt alle belegten IPv4-Adressen in allen Netzwerken (aufsteigend)
|
ips-all Zeigt alle belegten IPv4-Adressen in allen Netzwerken (aufsteigend)
|
||||||
|
unused-networks Zeigt alle Docker Netzwerke ohne verbundene Container
|
||||||
|
delete-networks Netzwerk per Nummer auswaehlen und loeschen;
|
||||||
|
Docker-Standardnetzwerke (bridge, host, none) sind geschuetzt
|
||||||
inspect <netzwerk> Zeigt detaillierte Informationen zu einem Netzwerk:
|
inspect <netzwerk> Zeigt detaillierte Informationen zu einem Netzwerk:
|
||||||
- Netzwerktyp (Driver)
|
- Netzwerktyp (Driver)
|
||||||
- Bridge-Interface
|
- Bridge-Interface
|
||||||
@@ -66,6 +76,8 @@ BEISPIELE:
|
|||||||
$0 networks
|
$0 networks
|
||||||
$0 ips mynetwork
|
$0 ips mynetwork
|
||||||
$0 ips-all
|
$0 ips-all
|
||||||
|
$0 unused-networks
|
||||||
|
$0 delete-networks
|
||||||
$0 inspect mynetwork
|
$0 inspect mynetwork
|
||||||
$0 mynetwork
|
$0 mynetwork
|
||||||
$0 -h
|
$0 -h
|
||||||
@@ -157,6 +169,92 @@ list_ips_all_networks() {
|
|||||||
print_dynamic_table "$table_data"
|
print_dynamic_table "$table_data"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
list_unused_networks() {
|
||||||
|
local nets net containers table_data has_unused
|
||||||
|
|
||||||
|
nets="$(docker network ls --format '{{.Name}}' 2>/dev/null || true)"
|
||||||
|
[[ -z "$nets" ]] && {
|
||||||
|
echo "Fehler: Docker Netzwerke konnten nicht abgerufen werden."
|
||||||
|
exit 2
|
||||||
|
}
|
||||||
|
|
||||||
|
table_data=$'NAME\tDRIVER\tSCOPE\n'
|
||||||
|
has_unused=false
|
||||||
|
|
||||||
|
while read -r net; do
|
||||||
|
[[ -z "${net:-}" ]] && continue
|
||||||
|
containers="$(docker network inspect "$net" --format '{{len .Containers}}' 2>/dev/null || true)"
|
||||||
|
if [[ "${containers:-0}" -eq 0 ]]; then
|
||||||
|
local driver scope
|
||||||
|
driver="$(docker network inspect "$net" --format '{{.Driver}}' 2>/dev/null || true)"
|
||||||
|
scope="$(docker network inspect "$net" --format '{{.Scope}}' 2>/dev/null || true)"
|
||||||
|
table_data+="${net}"$'\t'"${driver}"$'\t'"${scope}"$'\n'
|
||||||
|
has_unused=true
|
||||||
|
fi
|
||||||
|
done < <(printf "%s\n" "$nets")
|
||||||
|
|
||||||
|
if ! $has_unused; then
|
||||||
|
echo "Alle Docker Netzwerke haben mindestens einen verbundenen Container."
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
print_table_title "Ungenutzte Docker Netzwerke (keine Container verbunden):"
|
||||||
|
print_dynamic_table "$table_data"
|
||||||
|
}
|
||||||
|
|
||||||
|
delete_networks() {
|
||||||
|
local nets
|
||||||
|
nets="$(docker network ls --format '{{.Name}}' 2>/dev/null || true)"
|
||||||
|
if [[ -z "$nets" ]]; then
|
||||||
|
echo "Fehler: Keine Docker Netzwerke gefunden."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
local -a net_array
|
||||||
|
mapfile -t net_array <<< "$nets"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "Verfuegbare Docker Netzwerke:"
|
||||||
|
echo ""
|
||||||
|
local i
|
||||||
|
for ((i=0; i<${#net_array[@]}; i++)); do
|
||||||
|
local suffix=""
|
||||||
|
[[ "${net_array[$i]}" == "bridge" || "${net_array[$i]}" == "host" || "${net_array[$i]}" == "none" ]] && suffix=" (Standard - nicht loeschbar)"
|
||||||
|
printf " %d. %s%s\n" "$((i+1))" "${net_array[$i]}" "$suffix"
|
||||||
|
done
|
||||||
|
echo ""
|
||||||
|
read -rp "Nummer des Netzwerks eingeben (0 = Abbrechen): " choice
|
||||||
|
|
||||||
|
if [[ "$choice" == "0" || -z "$choice" ]]; then
|
||||||
|
echo "Abgebrochen."
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! [[ "$choice" =~ ^[0-9]+$ ]] || ((choice < 1 || choice > ${#net_array[@]})); then
|
||||||
|
echo "Fehler: Ungueltige Nummer."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
local selected_net="${net_array[$((choice-1))]}"
|
||||||
|
if [[ "$selected_net" == "bridge" || "$selected_net" == "host" || "$selected_net" == "none" ]]; then
|
||||||
|
echo "FEHLER: '$selected_net' ist ein Docker-Standardnetzwerk und kann nicht geloescht werden."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
read -rp "Netzwerk '$selected_net' wirklich loeschen? [j/N]: " confirm
|
||||||
|
if [[ "$confirm" != "j" && "$confirm" != "J" ]]; then
|
||||||
|
echo "Abgebrochen."
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
if docker network rm "$selected_net" 2>/dev/null; then
|
||||||
|
echo "OK: Netzwerk '$selected_net' erfolgreich geloescht."
|
||||||
|
else
|
||||||
|
echo "FEHLER: Netzwerk '$selected_net' konnte nicht geloescht werden (wird moeglicherweise noch genutzt)."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# Interaktive Menü-Funktion
|
# Interaktive Menü-Funktion
|
||||||
interactive_menu() {
|
interactive_menu() {
|
||||||
while true; do
|
while true; do
|
||||||
@@ -169,9 +267,11 @@ interactive_menu() {
|
|||||||
echo "2. Detaillierte Infos zu einem Netzwerk"
|
echo "2. Detaillierte Infos zu einem Netzwerk"
|
||||||
echo "3. IPs eines Netzwerks anzeigen"
|
echo "3. IPs eines Netzwerks anzeigen"
|
||||||
echo "4. Alle belegten IPs anzeigen"
|
echo "4. Alle belegten IPs anzeigen"
|
||||||
|
echo "5. Ungenutzte Netzwerke anzeigen"
|
||||||
|
echo "6. Netzwerke loeschen"
|
||||||
echo "0. Beenden"
|
echo "0. Beenden"
|
||||||
echo ""
|
echo ""
|
||||||
read -p "Bitte waehlen Sie eine Option (0-4): " choice
|
read -rp "Bitte waehlen Sie eine Option (0-6): " choice
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
case "$choice" in
|
case "$choice" in
|
||||||
@@ -203,12 +303,18 @@ interactive_menu() {
|
|||||||
4)
|
4)
|
||||||
list_ips_all_networks
|
list_ips_all_networks
|
||||||
;;
|
;;
|
||||||
|
5)
|
||||||
|
list_unused_networks
|
||||||
|
;;
|
||||||
|
6)
|
||||||
|
delete_networks
|
||||||
|
;;
|
||||||
0)
|
0)
|
||||||
echo "Auf Wiedersehen!"
|
echo "Auf Wiedersehen!"
|
||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "FEHLER: Ungueltige Eingabe '$choice'. Bitte geben Sie eine Nummer zwischen 0 und 4 ein."
|
echo "FEHLER: Ungueltige Eingabe '$choice'. Bitte geben Sie eine Nummer zwischen 0 und 6 ein."
|
||||||
sleep 1
|
sleep 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@@ -240,26 +346,44 @@ select_and_inspect_network() {
|
|||||||
# Separate Funktion fuer Netzwerk-Inspektion
|
# Separate Funktion fuer Netzwerk-Inspektion
|
||||||
inspect_network() {
|
inspect_network() {
|
||||||
local NET="$1"
|
local NET="$1"
|
||||||
|
|
||||||
# 1) Netzwerk-ID und Bridge-Name separat holen
|
local DRIVER
|
||||||
|
DRIVER="$(docker network inspect "$NET" --format '{{.Driver}}' 2>/dev/null || true)"
|
||||||
|
[[ -z "$DRIVER" ]] && { echo "Fehler: Netzwerk '$NET' nicht gefunden."; return 2; }
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
print_rule "="
|
||||||
|
echo "Detaillerte Informationen fuer Netzwerk: $NET"
|
||||||
|
print_rule "="
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Sonderbehandlung fuer Docker-Standardnetzwerke
|
||||||
|
if [[ "$NET" == "none" || "$NET" == "host" || "$NET" == "bridge" ]]; then
|
||||||
|
cat <<OUT
|
||||||
|
Docker-Netzwerk : $NET
|
||||||
|
Driver : $DRIVER
|
||||||
|
Hinweis : Dies ist ein Docker-Standardnetzwerk und kann nicht geloescht werden.
|
||||||
|
OUT
|
||||||
|
echo ""
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 1) Netzwerk-ID und Bridge-Name
|
||||||
local ID BR_RAW IF SUBNET GATEWAY state rxb txb rxp txp
|
local ID BR_RAW IF SUBNET GATEWAY state rxb txb rxp txp
|
||||||
ID="$(docker network inspect "$NET" --format '{{.Id}}' 2>/dev/null || true)"
|
ID="$(docker network inspect "$NET" --format '{{.Id}}' 2>/dev/null || true)"
|
||||||
[[ -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)"
|
BR_RAW="$(docker network inspect "$NET" --format '{{index .Options "com.docker.network.bridge.name"}}' 2>/dev/null || true)"
|
||||||
|
|
||||||
# 2) Falls kein eigener Bridge-Name: Standardname br-<ID[:12]>
|
|
||||||
if [[ -z "$BR_RAW" || "$BR_RAW" == "<no value>" ]]; then
|
if [[ -z "$BR_RAW" || "$BR_RAW" == "<no value>" ]]; then
|
||||||
IF="br-${ID:0:12}"
|
IF="br-${ID:0:12}"
|
||||||
else
|
else
|
||||||
IF="$BR_RAW"
|
IF="$BR_RAW"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 3) Subnet/Gateway
|
# 2) Subnet/Gateway
|
||||||
SUBNET="$(docker network inspect "$NET" --format '{{(index .IPAM.Config 0).Subnet}}' 2>/dev/null || true)"
|
SUBNET="$(docker network inspect "$NET" --format '{{(index .IPAM.Config 0).Subnet}}' 2>/dev/null || true)"
|
||||||
GATEWAY="$(docker network inspect "$NET" --format '{{(index .IPAM.Config 0).Gateway}}' 2>/dev/null || true)"
|
GATEWAY="$(docker network inspect "$NET" --format '{{(index .IPAM.Config 0).Gateway}}' 2>/dev/null || true)"
|
||||||
|
|
||||||
# 4) Interface-Status & Stats
|
# 3) Interface-Status & Stats
|
||||||
state="unknown"; rxb=0; txb=0; rxp=0; txp=0
|
state="unknown"; rxb=0; txb=0; rxp=0; txp=0
|
||||||
if ip link show "$IF" &>/dev/null; then
|
if ip link show "$IF" &>/dev/null; then
|
||||||
state="$(cat /sys/class/net/"$IF"/operstate 2>/dev/null || echo unknown)"
|
state="$(cat /sys/class/net/"$IF"/operstate 2>/dev/null || echo unknown)"
|
||||||
@@ -267,18 +391,11 @@ inspect_network() {
|
|||||||
txb="$(cat /sys/class/net/"$IF"/statistics/tx_bytes 2>/dev/null || echo 0)"
|
txb="$(cat /sys/class/net/"$IF"/statistics/tx_bytes 2>/dev/null || echo 0)"
|
||||||
rxp="$(cat /sys/class/net/"$IF"/statistics/rx_packets 2>/dev/null || echo 0)"
|
rxp="$(cat /sys/class/net/"$IF"/statistics/rx_packets 2>/dev/null || echo 0)"
|
||||||
txp="$(cat /sys/class/net/"$IF"/statistics/tx_packets 2>/dev/null || echo 0)"
|
txp="$(cat /sys/class/net/"$IF"/statistics/tx_packets 2>/dev/null || echo 0)"
|
||||||
else
|
|
||||||
echo "WARN: Interface $IF existiert (noch) nicht auf dem Host."
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo ""
|
|
||||||
print_rule "="
|
|
||||||
echo "Detaillerte Informationen fuer Netzwerk: $NET"
|
|
||||||
print_rule "="
|
|
||||||
echo ""
|
|
||||||
cat <<OUT
|
cat <<OUT
|
||||||
Docker-Netzwerk : $NET
|
Docker-Netzwerk : $NET
|
||||||
Driver : $(docker network inspect "$NET" --format '{{.Driver}}')
|
Driver : $DRIVER
|
||||||
Bridge-Interface : $IF
|
Bridge-Interface : $IF
|
||||||
Subnet/Gateway : ${SUBNET:--} / ${GATEWAY:--}
|
Subnet/Gateway : ${SUBNET:--} / ${GATEWAY:--}
|
||||||
OperState : $state
|
OperState : $state
|
||||||
@@ -305,6 +422,14 @@ case "$COMMAND" in
|
|||||||
list_ips_all_networks
|
list_ips_all_networks
|
||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
|
unused-networks)
|
||||||
|
list_unused_networks
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
delete-networks)
|
||||||
|
delete_networks
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
help | -h | --help)
|
help | -h | --help)
|
||||||
show_help
|
show_help
|
||||||
exit 0
|
exit 0
|
||||||
|
|||||||
13
docs/README.md
Normal file
13
docs/README.md
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# Dockernet Inspector – Dokumentation
|
||||||
|
|
||||||
|
Willkommen in der Dokumentation des **Dockernet Inspectors**.
|
||||||
|
|
||||||
|
## Inhaltsverzeichnis
|
||||||
|
|
||||||
|
| Dokument | Beschreibung |
|
||||||
|
|----------|--------------|
|
||||||
|
| [Installation](installation.md) | Voraussetzungen, Klonen und Einrichtung |
|
||||||
|
| [Verwendung](usage.md) | Modi, Befehle und Optionen |
|
||||||
|
| [Beispiele](examples.md) | Ausgabe-Beispiele zu allen Befehlen |
|
||||||
|
| [Fehlerbehandlung](error-handling.md) | Fehlermeldungen und deren Bedeutung |
|
||||||
|
| [Technische Details](technical.md) | Voraussetzungen und verwendete Tools |
|
||||||
19
docs/error-handling.md
Normal file
19
docs/error-handling.md
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# Fehlerbehandlung
|
||||||
|
|
||||||
|
## CLI-Modus
|
||||||
|
|
||||||
|
| Situation | Fehlermeldung |
|
||||||
|
|-----------|---------------|
|
||||||
|
| Kein Netzwerkname bei `inspect` | `Fehler: Netzwerkname erforderlich. Verwendung: $0 inspect <docker-network-name>` |
|
||||||
|
| Kein Netzwerkname bei `ips` | `Fehler: Netzwerkname erforderlich. Verwendung: $0 ips <docker-network-name>` |
|
||||||
|
| Netzwerk nicht gefunden | `Fehler: Netzwerk '<name>' nicht gefunden.` |
|
||||||
|
| Docker nicht erreichbar | `Fehler: Docker Netzwerke konnten nicht abgerufen werden.` |
|
||||||
|
|
||||||
|
## Interaktiver Modus
|
||||||
|
|
||||||
|
| Situation | Fehlermeldung |
|
||||||
|
|-----------|---------------|
|
||||||
|
| Ungültige Menü-Eingabe | `FEHLER: Ungueltige Eingabe. Bitte geben Sie eine Nummer zwischen 0 und 4 ein.` |
|
||||||
|
| Keine Netzwerke vorhanden | `Fehler: Keine Docker Netzwerke gefunden.` |
|
||||||
|
|
||||||
|
Bei ungültigen Eingaben im interaktiven Modus bricht das Script nicht ab – der Nutzer kann die Eingabe korrigieren.
|
||||||
74
docs/examples.md
Normal file
74
docs/examples.md
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
# Ausgabe-Beispiele
|
||||||
|
|
||||||
|
## `networks`
|
||||||
|
|
||||||
|
```text
|
||||||
|
Verfügbare Docker Netzwerke:
|
||||||
|
================================================================================
|
||||||
|
ID NAME DRIVER SCOPE
|
||||||
|
------------------------------------------------------------------------------------
|
||||||
|
abcd1234efgh5678ijkl9012 bridge bridge local
|
||||||
|
mnop4567qrst8901uvwx2345 host host local
|
||||||
|
yzab3456cdef7890ghij1234 mynet bridge local
|
||||||
|
```
|
||||||
|
|
||||||
|
## `inspect`
|
||||||
|
|
||||||
|
```text
|
||||||
|
Docker-Netzwerk : my-network
|
||||||
|
Driver : bridge
|
||||||
|
Bridge-Interface : br-1234567890ab
|
||||||
|
Subnet/Gateway : 172.18.0.0/16 / 172.18.0.1
|
||||||
|
OperState : up
|
||||||
|
RX bytes/packets : 123456 / 789
|
||||||
|
TX bytes/packets : 654321 / 456
|
||||||
|
```
|
||||||
|
|
||||||
|
## `ips`
|
||||||
|
|
||||||
|
```text
|
||||||
|
Belegte IP-Adressen im Netzwerk 'dockernet':
|
||||||
|
================================================================================
|
||||||
|
CONTAINER IP
|
||||||
|
dozzle 172.16.0.95
|
||||||
|
grafana 172.16.0.129
|
||||||
|
```
|
||||||
|
|
||||||
|
## `ips-all`
|
||||||
|
|
||||||
|
```text
|
||||||
|
Belegte IP-Adressen in allen Netzwerken (aufsteigend):
|
||||||
|
================================================================================
|
||||||
|
NETZWERK CONTAINER IP
|
||||||
|
dockernet dozzle 172.16.0.95
|
||||||
|
datagerry.dockernetwork.local datagerry-nginx 172.16.14.10
|
||||||
|
matrixnetwork matrix-synapse-db 172.19.0.11
|
||||||
|
```
|
||||||
|
|
||||||
|
## Interaktives Menü
|
||||||
|
|
||||||
|
```text
|
||||||
|
================================================================================
|
||||||
|
Dockerdet Inspector - Interaktives Menü
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
1. Alle Netzwerke auflisten
|
||||||
|
2. Detaillierte Infos zu einem Netzwerk
|
||||||
|
3. IPs eines Netzwerks anzeigen
|
||||||
|
4. Alle belegten IPs anzeigen
|
||||||
|
5. Ungenutzte Netzwerke anzeigen
|
||||||
|
0. Beenden
|
||||||
|
|
||||||
|
Bitte waehlen Sie eine Option (0-5):
|
||||||
|
```
|
||||||
|
|
||||||
|
## `unused-networks`
|
||||||
|
|
||||||
|
```text
|
||||||
|
Ungenutzte Docker Netzwerke (keine Container verbunden):
|
||||||
|
================================================================================
|
||||||
|
NAME DRIVER SCOPE
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
old-backend bridge local
|
||||||
|
test-network bridge local
|
||||||
|
```
|
||||||
22
docs/installation.md
Normal file
22
docs/installation.md
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Installation
|
||||||
|
|
||||||
|
## Voraussetzungen
|
||||||
|
|
||||||
|
- Docker ist installiert und läuft
|
||||||
|
- Bash (Version 4+ empfohlen)
|
||||||
|
- Linux-Host (für `/sys/class/net/` beim `inspect`-Befehl)
|
||||||
|
|
||||||
|
## Einrichtung
|
||||||
|
|
||||||
|
1. Repository klonen:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://git.techniverse.net/scriptos/dockernet-inspector.git
|
||||||
|
cd dockernet-inspector
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Script ausführbar machen:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
chmod +x dockernet-inspector.v1.sh
|
||||||
|
```
|
||||||
17
docs/technical.md
Normal file
17
docs/technical.md
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# Technische Details
|
||||||
|
|
||||||
|
## Voraussetzungen
|
||||||
|
|
||||||
|
- Docker ist installiert und läuft
|
||||||
|
- Bash Version 4+
|
||||||
|
- Linux-Host (für `/sys/class/net/` beim `inspect`-Befehl)
|
||||||
|
|
||||||
|
## Verwendete Tools
|
||||||
|
|
||||||
|
| Tool | Zweck |
|
||||||
|
|------|-------|
|
||||||
|
| `docker network ls` | Alle Netzwerke auflisten |
|
||||||
|
| `docker network inspect` | Netzwerk-Details abfragen |
|
||||||
|
| `sort -V` | Natürliche IP-Sortierung |
|
||||||
|
| `column -t -s $'\t'` | Dynamisch ausgerichtete Tabellenausgabe |
|
||||||
|
| `/sys/class/net/` | Interface-Status und RX/TX-Statistiken |
|
||||||
53
docs/usage.md
Normal file
53
docs/usage.md
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
# Verwendung
|
||||||
|
|
||||||
|
Das Script kann auf zwei Arten verwendet werden.
|
||||||
|
|
||||||
|
## Interaktiver Modus (Menü)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bash ./dockernet-inspector.v1.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
Das Script startet ein interaktives Menü mit folgenden Optionen:
|
||||||
|
|
||||||
|
- **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
|
||||||
|
- **5** – Ungenutzte Netzwerke anzeigen
|
||||||
|
- **0** – Beenden
|
||||||
|
|
||||||
|
Bei den Optionen **2** und **3** wird eine Netzwerkliste angezeigt, aus der per Nummer ausgewählt werden kann.
|
||||||
|
|
||||||
|
## Kommandozeilen-Modus (CLI)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bash ./dockernet-inspector.v1.sh [BEFEHL] [OPTIONEN]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Verfügbare Befehle
|
||||||
|
|
||||||
|
| Befehl | Beschreibung |
|
||||||
|
|--------|--------------|
|
||||||
|
| *(keine)* | Startet den 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 |
|
||||||
|
| `ips-all` | Zeigt alle belegten IPv4-Adressen in allen Docker-Netzwerken (aufsteigend sortiert) |
|
||||||
|
| `unused-networks` | Zeigt alle Docker-Netzwerke ohne verbundene Container |
|
||||||
|
| `<netzwerk>` | Alias für `inspect <netzwerk>` (Rückwärtskompatibilität) |
|
||||||
|
| `help`, `-h`, `--help` | Zeigt die Hilfe an |
|
||||||
|
|
||||||
|
### Kurzbeispiele
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bash ./dockernet-inspector.v1.sh networks
|
||||||
|
bash ./dockernet-inspector.v1.sh inspect bridge
|
||||||
|
bash ./dockernet-inspector.v1.sh my-custom-network
|
||||||
|
bash ./dockernet-inspector.v1.sh ips dockernet
|
||||||
|
bash ./dockernet-inspector.v1.sh ips-all
|
||||||
|
bash ./dockernet-inspector.v1.sh unused-networks
|
||||||
|
bash ./dockernet-inspector.v1.sh help
|
||||||
|
```
|
||||||
|
|
||||||
|
Ausführliche Ausgabe-Beispiele sind in [examples.md](examples.md) zu finden.
|
||||||
Reference in New Issue
Block a user