190 lines
4.2 KiB
Bash
190 lines
4.2 KiB
Bash
#!/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"
|