docker container debug info script
This commit is contained in:
1 parent
d241017c2a
commit
58795e9d5e
1 file changed
+189
@@ -0,0 +1,189 @@
|
||||
#!/usr/bin/env bash
|
||||
set -uo pipefail
|
||||
|
||||
CONTAINER="${1:-}"
|
||||
COMPOSE_FILE="${2:-}"
|
||||
|
||||
if [ -z "$CONTAINER" ]; then
|
||||
echo "Usage:"
|
||||
echo " $0 <container-name> [docker-compose.yml]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
|
||||
OUTDIR="/tmp/${CONTAINER}-debug-${TIMESTAMP}"
|
||||
|
||||
mkdir -p "$OUTDIR"
|
||||
|
||||
echo "[*] Collecting debug data for container: $CONTAINER"
|
||||
|
||||
# --------------------------------------------------
|
||||
# Docker info
|
||||
# --------------------------------------------------
|
||||
|
||||
docker inspect "$CONTAINER" \
|
||||
> "$OUTDIR/docker-inspect.json" 2>&1 || true
|
||||
|
||||
docker inspect "$CONTAINER" --format '{{.Config.Image}}' \
|
||||
> "$OUTDIR/image.txt" 2>&1 || true
|
||||
|
||||
# --------------------------------------------------
|
||||
# Logs
|
||||
# --------------------------------------------------
|
||||
|
||||
docker logs "$CONTAINER" --tail=10000 \
|
||||
> "$OUTDIR/container.log" 2>&1 || true
|
||||
|
||||
# --------------------------------------------------
|
||||
# Environment
|
||||
# --------------------------------------------------
|
||||
|
||||
docker exec "$CONTAINER" env \
|
||||
> "$OUTDIR/container-env.txt" 2>&1 || true
|
||||
|
||||
# --------------------------------------------------
|
||||
# Host information
|
||||
# --------------------------------------------------
|
||||
|
||||
{
|
||||
echo "=== HOST ==="
|
||||
|
||||
if command -v lsb_release >/dev/null 2>&1; then
|
||||
lsb_release -a
|
||||
fi
|
||||
|
||||
uname -a
|
||||
|
||||
echo
|
||||
echo "=== DOCKER ==="
|
||||
docker --version
|
||||
|
||||
} > "$OUTDIR/host.txt" 2>&1
|
||||
|
||||
PROGRAMS=(
|
||||
"yt-dlp"
|
||||
"ffmpeg"
|
||||
"ffprobe"
|
||||
"node"
|
||||
"npm"
|
||||
"python"
|
||||
"python3"
|
||||
"java"
|
||||
"curl"
|
||||
"wget"
|
||||
"git"
|
||||
)
|
||||
|
||||
# --------------------------------------------------
|
||||
# Common program versions
|
||||
# --------------------------------------------------
|
||||
|
||||
{
|
||||
echo "=== PROGRAM VERSIONS ==="
|
||||
echo
|
||||
|
||||
for prog in "${PROGRAMS[@]}"; do
|
||||
echo "----- $prog -----"
|
||||
|
||||
if docker exec "$CONTAINER" sh -c "command -v '$prog'" \
|
||||
>/dev/null 2>&1; then
|
||||
|
||||
docker exec "$CONTAINER" sh -c "
|
||||
$prog --version 2>/dev/null ||
|
||||
$prog -version 2>/dev/null ||
|
||||
$prog -V 2>/dev/null ||
|
||||
true
|
||||
" | head -n 5
|
||||
|
||||
else
|
||||
echo "not installed"
|
||||
fi
|
||||
|
||||
echo
|
||||
done
|
||||
|
||||
} > "$OUTDIR/versions.txt" 2>&1
|
||||
|
||||
# --------------------------------------------------
|
||||
# Compose snippet
|
||||
# --------------------------------------------------
|
||||
|
||||
if [ -n "$COMPOSE_FILE" ] && [ -f "$COMPOSE_FILE" ]; then
|
||||
|
||||
SERVICE=$(docker inspect "$CONTAINER" \
|
||||
--format '{{ index .Config.Labels "com.docker.compose.service" }}' \
|
||||
2>/dev/null)
|
||||
|
||||
if [ -n "$SERVICE" ]; then
|
||||
yq ".services.\"$SERVICE\"" "$COMPOSE_FILE" \
|
||||
> "$OUTDIR/compose-service.yaml" 2>&1 || true
|
||||
fi
|
||||
fi
|
||||
|
||||
# --------------------------------------------------
|
||||
# Summary
|
||||
# --------------------------------------------------
|
||||
|
||||
{
|
||||
echo "================================="
|
||||
echo "Debug Summary"
|
||||
echo "================================="
|
||||
echo
|
||||
|
||||
echo "Container:"
|
||||
echo " $CONTAINER"
|
||||
echo
|
||||
|
||||
echo "Image:"
|
||||
cat "$OUTDIR/image.txt" 2>/dev/null
|
||||
echo
|
||||
|
||||
echo "Host:"
|
||||
uname -a
|
||||
lsb_release -a
|
||||
docker --version
|
||||
echo
|
||||
|
||||
echo "Compose Service:"
|
||||
|
||||
docker inspect "$CONTAINER" \
|
||||
--format '{{ index .Config.Labels "com.docker.compose.service" }}' \
|
||||
2>/dev/null || echo "unknown"
|
||||
|
||||
if [ -n "$SERVICE" ]; then
|
||||
echo "Docker Compose Config"
|
||||
yq ".services.\"$SERVICE\"" "$COMPOSE_FILE"
|
||||
fi
|
||||
echo
|
||||
echo "Programs found:"
|
||||
|
||||
for prog in "${PROGRAMS[@]}"; do
|
||||
if docker exec "$CONTAINER" sh -c "command -v '$prog'" \
|
||||
>/dev/null 2>&1; then
|
||||
echo "$prog: $(
|
||||
$prog --version 2>/dev/null ||
|
||||
$prog -version 2>/dev/null ||
|
||||
$prog -V 2>/dev/null ||
|
||||
true
|
||||
)" | head -n1
|
||||
fi
|
||||
done
|
||||
|
||||
} | tee "$OUTDIR/summary.txt"
|
||||
|
||||
# --------------------------------------------------
|
||||
# Archive
|
||||
# --------------------------------------------------
|
||||
|
||||
ARCHIVE="${OUTDIR}.tar.gz"
|
||||
|
||||
tar czf "$ARCHIVE" \
|
||||
-C "$(dirname "$OUTDIR")" \
|
||||
"$(basename "$OUTDIR")"
|
||||
|
||||
echo
|
||||
echo "[OK] Debug report created:"
|
||||
echo "$ARCHIVE"
|
||||
|
||||
echo
|
||||
ls -lh "$ARCHIVE"
|
||||
Reference in new issue
Block a user