Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| aeef9446eb | |||
| 1b171e16e3 | |||
| 2283176253 | |||
| 0b7cd31a7a | |||
| 71f5d9d772 |
1
.gitattributes
vendored
Normal file
1
.gitattributes
vendored
Normal file
@@ -0,0 +1 @@
|
||||
*.sh text eol=lf
|
||||
162
README.md
162
README.md
@@ -1,19 +1,24 @@
|
||||
# Dockernet Inspector
|
||||
|
||||
Ein Bash-Script zur Analyse und Anzeige von Details zu Docker-Netzwerken.
|
||||
Ein Bash-Script zur Verwaltung und Analyse von Docker-Netzwerken.
|
||||
|
||||
## 📋 Beschreibung
|
||||
## Beschreibung
|
||||
|
||||
**Dockernet Inspector** ist ein praktisches Bash-Script, das detaillierte Informationen über Docker-Netzwerke anzeigt. Es ermöglicht Administratoren und Entwicklern einen schnellen Überblick über die Konfiguration und den Status eines Docker-Netzwerks zu erhalten.
|
||||
**Dockernet Inspector** hilft bei der täglichen Arbeit mit Docker-Netzwerken und bietet vier Hauptfunktionen:
|
||||
|
||||
Das Script zeigt folgende Informationen an:
|
||||
- **Netzwerk-Driver** (bridge, overlay, host, etc.)
|
||||
- **Bridge-Interface-Name** auf dem Host-System
|
||||
- **Subnet und Gateway** des Netzwerks
|
||||
- **Interface-Status** (operstate: up, down, unknown)
|
||||
- **Netzwerk-Statistiken** (RX/TX Bytes und Pakete)
|
||||
1. Alle Netzwerke auflisten
|
||||
2. Netzwerk-Details inspizieren
|
||||
3. Belegte IPs pro Netzwerk anzeigen
|
||||
4. Belegte IPs in allen Netzwerken anzeigen (aufsteigend sortiert)
|
||||
|
||||
## 🚀 Installation
|
||||
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
|
||||
@@ -26,29 +31,63 @@ cd dockernet-inspector
|
||||
chmod +x dockernet-inspector.v1.sh
|
||||
```
|
||||
|
||||
## 💡 Verwendung
|
||||
## Verwendung
|
||||
|
||||
### Grundlegende Syntax
|
||||
### Syntax
|
||||
|
||||
```bash
|
||||
bash ./dockernet-inspector.v1.sh <docker-network-name>
|
||||
bash ./dockernet-inspector.v1.sh [BEFEHL] [OPTIONEN]
|
||||
```
|
||||
|
||||
### Verfügbare Befehle
|
||||
|
||||
| Befehl | Beschreibung |
|
||||
|--------|--------------|
|
||||
| `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
|
||||
|
||||
**Beispiel 1: Standard Bridge-Netzwerk analysieren**
|
||||
```bash
|
||||
bash ./dockernet-inspector.v1.sh bridge
|
||||
```
|
||||
# Alle Docker-Netzwerke auflisten
|
||||
bash ./dockernet-inspector.v1.sh networks
|
||||
|
||||
**Beispiel 2: Benutzerdefiniertes Netzwerk analysieren**
|
||||
```bash
|
||||
# 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
|
||||
```
|
||||
|
||||
### Beispiel-Ausgabe
|
||||
## 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
|
||||
@@ -58,64 +97,63 @@ RX bytes/packets : 123456 / 789
|
||||
TX bytes/packets : 654321 / 456
|
||||
```
|
||||
|
||||
## 📊 Ausgabe-Details
|
||||
### `ips`
|
||||
|
||||
| Feld | Beschreibung |
|
||||
|------|-------------|
|
||||
| **Docker-Netzwerk** | Name des analysierten Docker-Netzwerks |
|
||||
| **Driver** | Verwendeter Netzwerk-Treiber (bridge, overlay, host, etc.) |
|
||||
| **Bridge-Interface** | Name des Bridge-Interfaces auf dem Host (z.B. `br-xxxxxxxxxxxx`) |
|
||||
| **Subnet/Gateway** | IP-Bereich und Gateway-Adresse des Netzwerks |
|
||||
| **OperState** | Betriebszustand des Interfaces (up, down, unknown) |
|
||||
| **RX bytes/packets** | Empfangene Bytes/Pakete |
|
||||
| **TX bytes/packets** | Gesendete Bytes/Pakete |
|
||||
```text
|
||||
Belegte IP-Adressen im Netzwerk 'dockernet':
|
||||
========================================
|
||||
CONTAINER IP
|
||||
dozzle 172.16.0.95
|
||||
grafana 172.16.0.129
|
||||
```
|
||||
|
||||
## ⚠️ Voraussetzungen
|
||||
### `ips-all`
|
||||
|
||||
- **Docker** muss installiert und laufend sein
|
||||
- **Bash** (Version 4.0 oder höher empfohlen)
|
||||
- **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)
|
||||
```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
|
||||
## Fehlerbehandlung
|
||||
|
||||
Das Script gibt folgende Fehlermeldungen aus:
|
||||
Das Script gibt unter anderem folgende Fehlermeldungen aus:
|
||||
|
||||
- **Keine Netzwerk-Angabe:** `Usage: ./dockernet-inspector.v1.sh <docker-network-name>`
|
||||
- **Netzwerk nicht gefunden:** `Fehler: Netzwerk '<name>' nicht gefunden.`
|
||||
- **Interface existiert nicht:** `WARN: Interface <name> existiert (noch) nicht auf dem Host.`
|
||||
- Kein Befehl angegeben: `Fehler: Befehl erforderlich. Verwendung: $0 networks|inspect|ips|ips-all|help`
|
||||
- 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.`
|
||||
|
||||
## 🛠️ 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:
|
||||
- `docker network inspect` zur Abfrage von Netzwerk-Informationen
|
||||
- `/sys/class/net/` Interface für Netzwerk-Statistiken
|
||||
- `set -euo pipefail` für sichere Script-Ausführung
|
||||
- `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
|
||||
|
||||
## 📝 Lizenz
|
||||
## Lizenz
|
||||
|
||||
Siehe [LICENSE](./LICENSE) Datei für Details.
|
||||
Siehe [LICENSE](./LICENSE).
|
||||
|
||||
## 👤 Autor
|
||||
## Autor
|
||||
|
||||
**Patrick Asmus**
|
||||
- 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)
|
||||
|
||||
## 🤝 Beitragen
|
||||
## Version
|
||||
|
||||
Beiträge, Issues und Feature-Anfragen sind willkommen!
|
||||
|
||||
## 📅 Version
|
||||
|
||||
- **Version:** 1.0.0
|
||||
- **Datum:** 17.02.2026
|
||||
- **Modifikation:** Initial Release
|
||||
|
||||
<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>
|
||||
- **Version:** 1.2.0
|
||||
- **Datum:** 18.02.2026
|
||||
- **Modifikation:** IP-Listen pro Netzwerk und netzwerkübergreifend hinzugefügt
|
||||
|
||||
@@ -1,22 +1,199 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Script Name: dockernet-inspector.v1.sh
|
||||
# Beschreibung: Dockernet Inspector - Zeigt Details zu einem Docker-Netzwerk an (Netzwerktyp, Bridge-Interface, Subnet/Gateway, Interface-Status & Stats)
|
||||
# Verwendung: bash ./dockernet-inspector.v1.sh <docker-network-name>
|
||||
# Beschreibung: Dockernet Inspector - Verwaltet und inspiziert Docker-Netzwerke
|
||||
# - Alle Netzwerke auflisten
|
||||
# - Details zu einem spezifischen Docker-Netzwerk anzeigen
|
||||
# - Belegte IPs je Netzwerk und netzwerkuebergreifend ausgeben
|
||||
# Verwendung: bash ./dockernet-inspector.v1.sh [BEFEHL] [OPTIONS]
|
||||
# Befehle:
|
||||
# networks - Alle Docker Netzwerke auflisten
|
||||
# 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
|
||||
# Autor: Patrick Asmus
|
||||
# Web: https://www.cleveradmin.de
|
||||
# Git-Reposit.: https://git.techniverse.net/scriptos/dockernet-inspector.git
|
||||
# Version: 1.0.0
|
||||
# Datum: 17.02.2026
|
||||
# Modifikation: Initial
|
||||
# Version: 1.2.0
|
||||
# Datum: 18.02.2026
|
||||
# Modifikation: IP-Listen pro Netzwerk und netzwerkuebergreifend hinzugefuegt
|
||||
#####################################################
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
NET="${1:-}"
|
||||
[[ -z "$NET" ]] && { echo "Usage: $0 <docker-network-name>"; exit 1; }
|
||||
TABLE_LINE_WIDTH=80
|
||||
|
||||
# 1) Netzwerk-ID und Bridge-Name separat holen (jeweils eigenes inspect)
|
||||
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
|
||||
show_help() {
|
||||
cat <<HELP
|
||||
Dockernet Inspector v1.2.0 - Docker Netzwerk Verwaltungstool
|
||||
|
||||
VERWENDUNG:
|
||||
$0 networks - Alle Docker Netzwerke auflisten
|
||||
$0 inspect <netzwerk> - Details zu einem Netzwerk anzeigen
|
||||
$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
|
||||
|
||||
BEFEHLE:
|
||||
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:
|
||||
- Netzwerktyp (Driver)
|
||||
- Bridge-Interface
|
||||
- Subnetz und Gateway
|
||||
- Interface-Status
|
||||
- Netzwerk-Statistiken (RX/TX bytes und packets)
|
||||
help Zeigt diese Hilfe an
|
||||
|
||||
BEISPIELE:
|
||||
$0 networks
|
||||
$0 ips mynetwork
|
||||
$0 ips-all
|
||||
$0 inspect mynetwork
|
||||
$0 mynetwork
|
||||
$0 -h
|
||||
|
||||
HELP
|
||||
}
|
||||
|
||||
# Funktion zum Auflisten aller Docker Netzwerke
|
||||
list_networks() {
|
||||
local table_output header
|
||||
|
||||
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."
|
||||
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
|
||||
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; }
|
||||
;;
|
||||
"")
|
||||
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"
|
||||
;;
|
||||
esac
|
||||
|
||||
# Hauptlogik fuer die Inspektion eines Netzwerks
|
||||
[[ -z "${NET:-}" ]] && { echo "Fehler: Netzwerkname erforderlich. Verwendung: $0 <docker-network-name>"; exit 1; }
|
||||
|
||||
# 1) Netzwerk-ID und Bridge-Name separat holen
|
||||
ID="$(docker network inspect "$NET" --format '{{.Id}}' 2>/dev/null || true)"
|
||||
[[ -z "$ID" ]] && { echo "Fehler: Netzwerk '$NET' nicht gefunden."; exit 2; }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user