3 Commits

Author SHA1 Message Date
aeef9446eb Merge pull request 'v1.2.0' (#3) from auflistung-per-container into main
Reviewed-on: #3
2026-02-18 13:19:51 +00:00
1b171e16e3 v1.2.0 2026-02-18 14:19:12 +01:00
2283176253 Merge pull request 'v1.1.0' (#2) from optimierung into main
Reviewed-on: #2
2026-02-17 11:24:02 +00:00
3 changed files with 198 additions and 90 deletions

1
.gitattributes vendored Normal file
View File

@@ -0,0 +1 @@
*.sh text eol=lf

151
README.md
View File

@@ -2,21 +2,23 @@
Ein Bash-Script zur Verwaltung und Analyse von Docker-Netzwerken. Ein Bash-Script zur Verwaltung und Analyse von Docker-Netzwerken.
## 📋 Beschreibung ## Beschreibung
**Dockernet Inspector** ist ein praktisches Bash-Script, das Administratoren und Entwicklern die Verwaltung und Analyse von Docker-Netzwerken erleichtert. Das Script bietet zwei Hauptfunktionen: **Dockernet Inspector** hilft bei der täglichen Arbeit mit Docker-Netzwerken und bietet vier Hauptfunktionen:
1. **Alle Netzwerke auflisten** - Anzeige aller verfügbaren Docker-Netzwerke mit ihren Treibern 1. Alle Netzwerke auflisten
2. **Netzwerk-Details inspizieren** - Detaillierte Informationen zu einem spezifischen Netzwerk 2. Netzwerk-Details inspizieren
3. Belegte IPs pro Netzwerk anzeigen
4. Belegte IPs in allen Netzwerken anzeigen (aufsteigend sortiert)
Das Script zeigt folgende Informationen beim Inspizieren an: Beim Inspizieren eines Netzwerks werden u. a. folgende Informationen angezeigt:
- **Netzwerk-Driver** (bridge, overlay, host, etc.) - Netzwerk-Driver (bridge, overlay, host, ...)
- **Bridge-Interface-Name** auf dem Host-System - Bridge-Interface auf dem Host
- **Subnet und Gateway** des Netzwerks - Subnet und Gateway
- **Interface-Status** (operstate: up, down, unknown) - Interface-Status (operstate)
- **Netzwerk-Statistiken** (RX/TX Bytes und Pakete) - RX/TX Netzwerk-Statistiken
## 🚀 Installation ## Installation
1. Repository klonen: 1. Repository klonen:
```bash ```bash
@@ -29,48 +31,52 @@ cd dockernet-inspector
chmod +x dockernet-inspector.v1.sh chmod +x dockernet-inspector.v1.sh
``` ```
## 💡 Verwendung ## Verwendung
### Grundlegende Syntax ### Syntax
```bash ```bash
bash ./dockernet-inspector.v1.sh [BEFEHL] [OPTIONS] bash ./dockernet-inspector.v1.sh [BEFEHL] [OPTIONEN]
``` ```
### Verfügbare Befehle ### Verfügbare Befehle
| Befehl | Beschreibung | | Befehl | Beschreibung |
|--------|-------------| |--------|--------------|
| `networks` | Listet alle verfügbaren Docker-Netzwerke auf | | `networks` | Listet alle verfügbaren Docker-Netzwerke auf |
| `inspect <netzwerk>` | Zeigt detaillierte Informationen zu einem Netzwerk | | `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) | | `<netzwerk>` | Alias für `inspect <netzwerk>` (Rückwärtskompatibilität) |
| `help`, `-h`, `--help` | Zeigt die Hilfe an | | `help`, `-h`, `--help` | Zeigt die Hilfe an |
### Beispiele ### Beispiele
**Beispiel 1: Alle Docker-Netzwerke auflisten**
```bash ```bash
# Alle Docker-Netzwerke auflisten
bash ./dockernet-inspector.v1.sh networks bash ./dockernet-inspector.v1.sh networks
```
**Beispiel 2: Standard Bridge-Netzwerk analysieren (mit inspect)** # Netzwerk analysieren (explizit)
```bash
bash ./dockernet-inspector.v1.sh inspect bridge bash ./dockernet-inspector.v1.sh inspect bridge
```
**Beispiel 3: Benutzerdefiniertes Netzwerk analysieren (Schnellform)** # Netzwerk analysieren (Alias)
```bash
bash ./dockernet-inspector.v1.sh my-custom-network bash ./dockernet-inspector.v1.sh my-custom-network
```
**Beispiel 4: Hilfe anzeigen** # Belegte IPs eines Netzwerks
```bash 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 bash ./dockernet-inspector.v1.sh help
``` ```
### Beispiel-Ausgabe für `networks` ## Ausgabe-Beispiele
``` ### `networks`
```text
Verfügbare Docker Netzwerke: Verfügbare Docker Netzwerke:
============================== ==============================
ID NAME DRIVER SCOPE ID NAME DRIVER SCOPE
@@ -79,9 +85,9 @@ mnop4567qrst8901uvwx2345 host host local
yzab3456cdef7890ghij1234 mynet bridge local yzab3456cdef7890ghij1234 mynet bridge local
``` ```
### Beispiel-Ausgabe für `inspect` ### `inspect`
``` ```text
Docker-Netzwerk : my-network Docker-Netzwerk : my-network
Driver : bridge Driver : bridge
Bridge-Interface : br-1234567890ab Bridge-Interface : br-1234567890ab
@@ -91,66 +97,63 @@ RX bytes/packets : 123456 / 789
TX bytes/packets : 654321 / 456 TX bytes/packets : 654321 / 456
``` ```
## 📊 Ausgabe-Details ### `ips`
| Feld | Beschreibung | ```text
|------|-------------| Belegte IP-Adressen im Netzwerk 'dockernet':
| **Docker-Netzwerk** | Name des analysierten Docker-Netzwerks | ========================================
| **Driver** | Verwendeter Netzwerk-Treiber (bridge, overlay, host, etc.) | CONTAINER IP
| **Bridge-Interface** | Name des Bridge-Interfaces auf dem Host (z.B. `br-xxxxxxxxxxxx`) | dozzle 172.16.0.95
| **Subnet/Gateway** | IP-Bereich und Gateway-Adresse des Netzwerks | grafana 172.16.0.129
| **OperState** | Betriebszustand des Interfaces (up, down, unknown) | ```
| **RX bytes/packets** | Empfangene Bytes/Pakete |
| **TX bytes/packets** | Gesendete Bytes/Pakete |
## ⚠️ Voraussetzungen ### `ips-all`
- **Docker** muss installiert und laufend sein ```text
- **Bash** (Version 4.0 oder höher empfohlen) Belegte IP-Adressen in allen Netzwerken (aufsteigend):
- **Root/Sudo-Rechte** können für den Zugriff auf System-Interfaces erforderlich sein =======================================================
- Linux-Betriebssystem (das Script nutzt `/sys/class/net/` für Interface-Statistiken) 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 ## Fehlerbehandlung
Das Script gibt folgende Fehlermeldungen aus: Das Script gibt unter anderem folgende Fehlermeldungen aus:
- **Kein Befehl angegeben:** `Fehler: Befehl erforderlich. Verwendung: $0 networks|inspect|help` - Kein Befehl angegeben: `Fehler: Befehl erforderlich. Verwendung: $0 networks|inspect|ips|ips-all|help`
- **Keine Netzwerk-Angabe beim Inspizieren:** `Fehler: Netzwerkname erforderlich. Verwendung: $0 inspect <docker-network-name>` - Keine Netzwerk-Angabe bei `inspect`: `Fehler: Netzwerkname erforderlich. Verwendung: $0 inspect <docker-network-name>`
- **Netzwerk nicht gefunden:** `Fehler: Netzwerk '<name>' nicht gefunden.` - Keine Netzwerk-Angabe bei `ips`: `Fehler: Netzwerkname erforderlich. Verwendung: $0 ips <docker-network-name>`
- **Docker Netzwerke konnten nicht abgerufen werden:** `Fehler: Docker Netzwerke konnten nicht abgerufen werden.` - Netzwerk nicht gefunden: `Fehler: Netzwerk '<name>' nicht gefunden.`
- **Interface existiert nicht:** `WARN: Interface <name> existiert (noch) nicht auf dem Host.` - Docker-Netzwerke konnten nicht abgerufen werden: `Fehler: Docker Netzwerke konnten nicht abgerufen werden.`
## 🛠️ Technische Details ## 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: Das Script nutzt:
- `docker network inspect` zur Abfrage von Netzwerk-Informationen - `docker network ls` und `docker network inspect`
- `/sys/class/net/` Interface für Netzwerk-Statistiken - `sort -V` für natürliche IP-Sortierung
- `set -euo pipefail` für sichere Script-Ausführung - `column -t -s $'\t'` für dynamisch ausgerichtete Tabellen
- `set -euo pipefail` für robuste Script-Ausführung
## 📝 Lizenz ## Lizenz
Siehe [LICENSE](./LICENSE) Datei für Details. Siehe [LICENSE](./LICENSE).
## 👤 Autor ## Autor
**Patrick Asmus** **Patrick Asmus**
- Website: [https://www.cleveradmin.de](https://www.cleveradmin.de) - Website: [https://www.cleveradmin.de](https://www.cleveradmin.de)
- Git: [https://git.techniverse.net/scriptos/dockernet-inspector.git](https://git.techniverse.net/scriptos/dockernet-inspector.git) - Git: [https://git.techniverse.net/scriptos/dockernet-inspector.git](https://git.techniverse.net/scriptos/dockernet-inspector.git)
## 🤝 Beitragen ## Version
Beiträge, Issues und Feature-Anfragen sind willkommen! - **Version:** 1.2.0
- **Datum:** 18.02.2026
## 📅 Version - **Modifikation:** IP-Listen pro Netzwerk und netzwerkübergreifend hinzugefügt
- **Version:** 1.1.0
- **Datum:** 17.02.2026
- **Modifikation:** Funktion zur Auflistung aller Docker-Netzwerke hinzugefügt
<p align="center">
<img src="https://assets.techniverse.net/f1/git/graphics/gray0-catonline.svg" alt="">
</p>
<p align="center">
<img src="https://assets.techniverse.net/f1/logos/small/license.png" alt="License" width="15" height="15"> <a href="./LICENSE">License</a> | <img src="https://assets.techniverse.net/f1/logos/small/matrix2.svg" alt="Matrix" width="15" height="15"> <a href="https://matrix.to/#/#community:techniverse.net">Matrix</a> | <img src="https://assets.techniverse.net/f1/logos/small/mastodon2.svg" alt="Matrix" width="15" height="15"> <a href="https://social.techniverse.net/@donnerwolke">Mastodon</a>
</p>

View File

@@ -4,35 +4,54 @@
# Beschreibung: Dockernet Inspector - Verwaltet und inspiziert Docker-Netzwerke # Beschreibung: Dockernet Inspector - Verwaltet und inspiziert Docker-Netzwerke
# - Alle Netzwerke auflisten # - Alle Netzwerke auflisten
# - Details zu einem spezifischen Docker-Netzwerk anzeigen # - Details zu einem spezifischen Docker-Netzwerk anzeigen
# (Netzwerktyp, Bridge-Interface, Subnet/Gateway, Interface-Status & Stats) # - Belegte IPs je Netzwerk und netzwerkuebergreifend ausgeben
# 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-all - Belegte IPs in allen Netzwerken
# 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.1.0 # Version: 1.2.0
# Datum: 17.02.2026 # Datum: 18.02.2026
# Modifikation: Funktion zum Auflisten aller Docker Netzwerke hinzugefügt # Modifikation: IP-Listen pro Netzwerk und netzwerkuebergreifend hinzugefuegt
##################################################### #####################################################
set -euo pipefail set -euo pipefail
TABLE_LINE_WIDTH=80
print_rule() {
local char="$1"
printf '%*s\n' "$TABLE_LINE_WIDTH" '' | tr ' ' "$char"
}
print_table_title() {
local title="$1"
echo "$title"
print_rule "="
}
# Hilfe-Funktion # Hilfe-Funktion
show_help() { show_help() {
cat <<HELP cat <<HELP
Dockernet Inspector v1.1.0 - Docker Netzwerk Verwaltungstool Dockernet Inspector v1.2.0 - Docker Netzwerk Verwaltungstool
VERWENDUNG: VERWENDUNG:
$0 networks - Alle Docker Netzwerke auflisten $0 networks - Alle Docker Netzwerke auflisten
$0 inspect <netzwerk> - Details zu einem Netzwerk anzeigen $0 inspect <netzwerk> - Details zu einem Netzwerk anzeigen
$0 <netzwerk> - Alias für 'inspect <netzwerk>' $0 ips <netzwerk> - Belegte IPs in einem Netzwerk anzeigen
$0 ips-all - Belegte IPs in allen Netzwerken anzeigen
$0 <netzwerk> - Alias fuer 'inspect <netzwerk>'
$0 help - Diese Hilfe anzeigen $0 help - Diese Hilfe anzeigen
BEFEHLE: BEFEHLE:
networks Listet alle verfügbaren Docker Netzwerke auf networks Listet alle verfuegbaren Docker Netzwerke auf
ips <netzwerk> Zeigt Containername und IPv4-Adresse im angegebenen Netzwerk
ips-all Zeigt alle belegten IPv4-Adressen in allen Netzwerken (aufsteigend)
inspect <netzwerk> Zeigt detaillierte Informationen zu einem Netzwerk: inspect <netzwerk> Zeigt detaillierte Informationen zu einem Netzwerk:
- Netzwerktyp (Driver) - Netzwerktyp (Driver)
- Bridge-Interface - Bridge-Interface
@@ -43,6 +62,8 @@ BEFEHLE:
BEISPIELE: BEISPIELE:
$0 networks $0 networks
$0 ips mynetwork
$0 ips-all
$0 inspect mynetwork $0 inspect mynetwork
$0 mynetwork $0 mynetwork
$0 -h $0 -h
@@ -52,12 +73,86 @@ HELP
# Funktion zum Auflisten aller Docker Netzwerke # Funktion zum Auflisten aller Docker Netzwerke
list_networks() { list_networks() {
echo "Verfügbare Docker Netzwerke:" local table_output header
echo "=============================="
docker network ls --format "table {{.ID}}\t{{.Name}}\t{{.Driver}}\t{{.Scope}}" || { print_table_title "Verfuegbare Docker Netzwerke:"
table_output="$(docker network ls --format "table {{.ID}}\t{{.Name}}\t{{.Driver}}\t{{.Scope}}")" || {
echo "Fehler: Docker Netzwerke konnten nicht abgerufen werden." echo "Fehler: Docker Netzwerke konnten nicht abgerufen werden."
exit 2 exit 2
} }
header="$(printf "%s\n" "$table_output" | head -n 1)"
printf "%s\n" "$header"
print_rule "-"
printf "%s\n" "$table_output" | tail -n +2
}
print_dynamic_table() {
local data="$1"
local formatted
local header
if command -v column >/dev/null 2>&1; then
formatted="$(printf "%b" "$data" | column -t -s $'\t')"
else
formatted="$(printf "%b" "$data")"
fi
header="$(printf "%s\n" "$formatted" | head -n 1)"
printf "%s\n" "$header"
print_rule "-"
printf "%s\n" "$formatted" | tail -n +2
}
list_ips_in_network() {
local net="$1"
local rows table_data
rows="$(docker network inspect "$net" --format '{{range $id, $c := .Containers}}{{println $c.Name $c.IPv4Address}}{{end}}' 2>/dev/null || true)"
[[ -z "$rows" ]] && {
echo "Keine Container mit IPv4-Adresse im Netzwerk '$net' gefunden."
exit 0
}
print_table_title "Belegte IP-Adressen im Netzwerk '$net':"
table_data=$'CONTAINER\tIP\n'
while read -r cname ipcidr; do
[[ -z "${cname:-}" || -z "${ipcidr:-}" ]] && continue
table_data+="${cname}"$'\t'"${ipcidr%%/*}"$'\n'
done < <(printf "%s\n" "$rows" | sort -k2,2V)
print_dynamic_table "$table_data"
}
list_ips_all_networks() {
local nets rows table_data
rows=""
nets="$(docker network ls --format '{{.Name}}' 2>/dev/null || true)"
[[ -z "$nets" ]] && {
echo "Fehler: Docker Netzwerke konnten nicht abgerufen werden."
exit 2
}
while read -r net; do
[[ -z "${net:-}" ]] && continue
while read -r cname ipcidr; do
[[ -z "${cname:-}" || -z "${ipcidr:-}" ]] && continue
rows+="${net}"$'\t'"${cname}"$'\t'"${ipcidr%%/*}"$'\n'
done < <(docker network inspect "$net" --format '{{range $id, $c := .Containers}}{{println $c.Name $c.IPv4Address}}{{end}}' 2>/dev/null || true)
done < <(printf "%s\n" "$nets")
[[ -z "$rows" ]] && {
echo "Keine belegten IPv4-Adressen in Docker Netzwerken gefunden."
exit 0
}
print_table_title "Belegte IP-Adressen in allen Netzwerken (aufsteigend):"
table_data=$'NETZWERK\tCONTAINER\tIP\n'
while IFS=$'\t' read -r net cname ip; do
[[ -z "${net:-}" || -z "${cname:-}" || -z "${ip:-}" ]] && continue
table_data+="${net}"$'\t'"${cname}"$'\t'"${ip}"$'\n'
done < <(printf "%s" "$rows" | sort -t $'\t' -k3,3V -k1,1 -k2,2)
print_dynamic_table "$table_data"
} }
# Argument-Verarbeitung # Argument-Verarbeitung
@@ -67,6 +162,16 @@ case "$COMMAND" in
list_networks list_networks
exit 0 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) help | -h | --help)
show_help show_help
exit 0 exit 0
@@ -76,20 +181,19 @@ case "$COMMAND" in
[[ -z "$NET" ]] && { echo "Fehler: Netzwerkname erforderlich. Verwendung: $0 inspect <docker-network-name>"; exit 1; } [[ -z "$NET" ]] && { echo "Fehler: Netzwerkname erforderlich. Verwendung: $0 inspect <docker-network-name>"; exit 1; }
;; ;;
"") "")
echo "Fehler: Befehl erforderlich. Verwendung: $0 networks|inspect|help" echo "Fehler: Befehl erforderlich. Verwendung: $0 networks|inspect|ips|ips-all|help"
exit 1 exit 1
;; ;;
*) *)
# Kompatibilität: Wenn erstes Argument kein bekannter Befehl ist, behandle es als Netzwerkname # Kompatibilitaet: Wenn erstes Argument kein bekannter Befehl ist, behandle es als Netzwerkname
NET="$COMMAND" NET="$COMMAND"
;; ;;
esac esac
# Hauptlogik für die Inspektion eines Netzwerks (rest des originalen Scripts) # Hauptlogik fuer die Inspektion eines Netzwerks
[[ -z "${NET:-}" ]] && { echo "Fehler: Netzwerkname erforderlich. Verwendung: $0 <docker-network-name>"; exit 1; }
[[ -z "$NET" ]] && { echo "Fehler: Netzwerkname erforderlich. Verwendung: $0 <docker-network-name>"; exit 1; } # 1) Netzwerk-ID und Bridge-Name separat holen
# 1) Netzwerk-ID und Bridge-Name separat holen (jeweils eigenes inspect)
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."; exit 2; } [[ -z "$ID" ]] && { echo "Fehler: Netzwerk '$NET' nicht gefunden."; exit 2; }