debug(web): deeper diag of nginx entrypoint crash
Debug: Web container crash diag / Web Crash Diagnostics (push) Successful in 49s

This commit is contained in:
xiaoxia-agent
2026-09-11 10:12:15 +08:00
parent 5659fddc97
commit 3e7273b8cd
+31 -34
View File
@@ -1,42 +1,39 @@
#!/bin/bash
set +e
echo "=== docker ps all ==="
docker ps -a --format "table {{.Names}}\t{{.Image}}\t{{.Status}}" | head -20
echo "=== web images present ==="
docker images | grep -E "xiaoxia.*web" | head
echo ""
echo "=== web logs (last 80 lines) ==="
WEB_CID=$(docker ps -aq --filter "name=xiaoxia-web-staging" | head -1)
echo "WEB_CID=$WEB_CID"
docker logs "$WEB_CID" 2>&1 | tail -80
echo "=== check nginx base default.conf ==="
BASE_IMG="git.xiaoxiajianji.com/xiaoxia/base/nginx:alpine"
CID=$(docker create "$BASE_IMG" /bin/sh)
echo "ephemeral cid=$CID"
echo "--- conf.d contents ---"
docker start "$CID" 2>/dev/null
docker exec "$CID" ls -la /etc/nginx/conf.d/ 2>&1
echo "--- default.conf type ---"
docker exec "$CID" file /etc/nginx/conf.d/default.conf 2>&1
docker exec "$CID" stat /etc/nginx/conf.d/default.conf 2>&1
echo ""
echo "=== web container inspect ==="
docker inspect "$WEB_CID" --format 'Status={{.State.Status}} ExitCode={{.State.ExitCode}} Error={{.State.Error}} RestartCount={{.RestartCount}} StartedAt={{.State.StartedAt}} FinishedAt={{.State.FinishedAt}}'
echo "=== test ln -sf on existing file ==="
docker exec "$CID" sh -c "ln -sf /etc/nginx/nginx.conf /etc/nginx/conf.d/default.conf && echo ln_ok && ls -la /etc/nginx/conf.d/default.conf"
docker rm -f "$CID" 2>/dev/null
echo ""
echo "=== nginx -t (try exec into running web, or start a new one) ==="
if docker exec "$WEB_CID" nginx -t 2>&1; then
echo "nginx config OK"
else
echo "nginx -t failed on running container (may be stopped)"
IMG=$(docker inspect "$WEB_CID" --format '{{.Config.Image}}')
echo "Image: $IMG"
echo "=== try running nginx -t in ephemeral container ==="
docker run --rm --entrypoint nginx "$IMG" -t 2>&1 | tail -20
fi
echo "=== check staging web image default.conf ==="
STAGING_WEB=$(docker inspect xiaoxia-web-staging --format '{{.Config.Image}}' 2>/dev/null)
echo "Staging web image: $STAGING_WEB"
CID2=$(docker create "$STAGING_WEB" /bin/sh)
echo "ephemeral cid=$CID2"
echo "--- conf.d in built image (before entrypoint) ---"
docker start "$CID2" 2>/dev/null || echo "(could not start, try without starting)"
docker exec "$CID2" ls -la /etc/nginx/conf.d/ 2>&1
echo "--- default.conf content head ---"
docker exec "$CID2" head -5 /etc/nginx/conf.d/default.conf 2>&1
docker exec "$CID2" file /etc/nginx/conf.d/default.conf 2>&1
echo "--- docker-entrypoint.sh content ---"
docker exec "$CID2" cat /docker-entrypoint.sh 2>&1
echo ""
echo "=== nginx conf.d files ==="
docker exec "$WEB_CID" ls -la /etc/nginx/conf.d/ 2>&1 | head
echo ""
echo "=== nginx.conf head ==="
docker exec "$WEB_CID" head -50 /etc/nginx/nginx.conf 2>&1 | head -60
echo ""
echo "=== default.conf head ==="
docker exec "$WEB_CID" cat /etc/nginx/conf.d/default.conf 2>&1 | head -40
echo ""
echo "=== entrypoint / docker CMD ==="
docker inspect "$WEB_CID" --format 'Entrypoint={{.Config.Entrypoint}} Cmd={{.Config.Cmd}}'
echo ""
echo "=== web health endpoint (via docker exec curl) ==="
docker exec "$WEB_CID" wget -qO- http://localhost:80/ 2>&1 | head -20 || \
docker exec "$WEB_CID" curl -sS http://localhost:80/ 2>&1 | head -20 || \
echo "no curl/wget in container"
echo "=== try running entrypoint manually ==="
docker exec -e APP_ENV=staging "$CID2" sh -x /docker-entrypoint.sh 2>&1 | head -30
docker rm -f "$CID2" 2>/dev/null
echo ""
echo "=== Done ==="