From 3e7273b8cda56bbf6cebe51bb693e8fe9a7b4a25 Mon Sep 17 00:00:00 2001 From: xiaoxia-agent Date: Fri, 11 Sep 2026 10:12:15 +0800 Subject: [PATCH] debug(web): deeper diag of nginx entrypoint crash --- infra/scripts/server-web-diag.sh | 65 +++++++++++++++----------------- 1 file changed, 31 insertions(+), 34 deletions(-) diff --git a/infra/scripts/server-web-diag.sh b/infra/scripts/server-web-diag.sh index 9c8b8b6b6..bf6c0d76e 100644 --- a/infra/scripts/server-web-diag.sh +++ b/infra/scripts/server-web-diag.sh @@ -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 ==="