docker inspect - alles über einen Container oder ein Image wissen

docker inspect - alles über einen Container oder ein Image wissen

docker inspect gibt vollständige Metadaten als JSON aus — was in docker ps oder docker images nicht sichtbar ist, steht hier.

Grundnutzung

docker inspect <container>     # Container-Details
docker inspect <image>         # Image-Details
docker inspect <network>       # Netzwerk-Details
docker inspect <volume>        # Volume-Details

Die Ausgabe ist immer ein JSON-Array — auch bei einem einzelnen Objekt.

Gezielt mit --format extrahieren

Das vollständige JSON ist riesig. Mit --format (Go-Templates) lassen sich einzelne Felder gezielt abrufen:

IP-Adresse im Standard-Netzwerk:

docker inspect --format='{{.NetworkSettings.IPAddress}}' myapp

IP in einem bestimmten Netzwerk:

docker inspect --format='{{.NetworkSettings.Networks.mynet.IPAddress}}' myapp

Restart-Policy:

docker inspect --format='{{.HostConfig.RestartPolicy.Name}}' myapp

Entrypoint und Command:

docker inspect --format='{{.Config.Entrypoint}}' myapp
docker inspect --format='{{.Config.Cmd}}' myapp

Gemountete Volumes:

docker inspect --format='{{range .Mounts}}{{.Source}} -> {{.Destination}}{{"\n"}}{{end}}' myapp

Ob OOM-Kill aufgetreten ist:

docker inspect --format='{{.State.OOMKilled}}' myapp

Exit-Code und Status:

docker inspect --format='{{.State.Status}} (Exit: {{.State.ExitCode}})' myapp

Umgebungsvariablen lesen

# Als Liste
docker inspect --format='{{range .Config.Env}}{{println .}}{{end}}' myapp

# Als JSON, dann mit jq filtern
docker inspect --format='{{json .Config.Env}}' myapp | jq '.[] | select(startswith("DB_"))'

Image inspizieren

docker image inspect nginx:latest

# Basis-Image und Layer
docker image inspect --format='{{.RootFS.Layers}}' nginx:latest

# Exposed Ports
docker image inspect --format='{{json .Config.ExposedPorts}}' nginx:latest

# Labels im Image
docker image inspect --format='{{json .Config.Labels}}' myapp:latest | jq

Mehrere Container auf einmal

docker inspect container1 container2 container3

# Nur IPs aller Container
docker ps -q | xargs docker inspect --format='{{.Name}}: {{.NetworkSettings.IPAddress}}'

Netzwerk inspizieren

docker network inspect bridge
docker network inspect --format='{{range .Containers}}{{.Name}}: {{.IPv4Address}}{{"\n"}}{{end}}' mynet

In Skripten nutzen

#!/bin/bash
# Warten bis Container healthy ist
CONTAINER="myapp"
until [ "$(docker inspect --format='{{.State.Health.Status}}' $CONTAINER)" = "healthy" ]; do
    echo "Warte auf $CONTAINER..."
    sleep 2
done
echo "$CONTAINER ist bereit."
# Prüfen ob Container läuft
if [ "$(docker inspect --format='{{.State.Running}}' myapp 2>/dev/null)" = "true" ]; then
    echo "Container läuft"
fi

Wichtige Pfade im JSON

.State.Status               → running, exited, paused
.State.Running              → true/false
.State.ExitCode             → letzter Exit-Code
.State.Health.Status        → starting, healthy, unhealthy
.HostConfig.RestartPolicy   → Name, MaximumRetryCount
.HostConfig.Memory          → RAM-Limit in Bytes (0 = unbegrenzt)
.HostConfig.NanoCpus        → CPU-Limit (1000000000 = 1 CPU)
.Config.Env                 → Array mit Umgebungsvariablen
.Config.Entrypoint          → Entrypoint
.Config.Cmd                 → Command
.Mounts                     → Volume-Mounts
.NetworkSettings.Networks   → Netzwerke mit IP-Adressen

docker inspect ist das Schweizer Taschenmesser für Container-Diagnose — besonders in Kombination mit jq und Shell-Skripten entfaltet es sein volles Potential.