name: "Debug: Web container v2 (mount conflict)" on: push: branches: [debug/web-crash-v2] workflow_dispatch: jobs: web-diag: runs-on: runtime-builder timeout-minutes: 10 steps: - name: Setup SSH and diagnose shell: bash env: STAGING_SSH_KEY: ${{ secrets.PREVIEW_SSH_KEY }} run: | set -x which ssh || (apt-get update -qq && apt-get install -y -qq openssh-client) mkdir -p ~/.ssh && chmod 700 ~/.ssh printf "%s" "$STAGING_SSH_KEY" > ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa H=47.98.113.167; P=22222 ssh-keyscan -p $P -H $H >> ~/.ssh/known_hosts 2>/dev/null ssh -p $P -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no root@$H 'bash -s' <<'REMOTE' set -x echo "=== Current staging containers ===" docker ps -a --filter name=xiaoxia-*-staging --format "table {{.Names}}\t{{.Status}}\t{{.Image}}" echo "" echo "=== Web container logs (current/current-rolledback) ===" docker logs xiaoxia-web-staging 2>&1 | tail -40 echo "" echo "=== Web inspect: env & mounts ===" docker inspect xiaoxia-web-staging --format 'Entrypoint: {{.Config.Entrypoint}} Cmd: {{.Config.Cmd}}' docker inspect xiaoxia-web-staging --format '{{range .Config.Env}}{{.}}{{"\n"}}{{end}}' | grep -E "APP_ENV|VERSION" echo "Mounts:" docker inspect xiaoxia-web-staging --format '{{range .Mounts}}{{.Type}} {{.Source}} -> {{.Destination}} (rw={{.RW}}){{"\n"}}{{end}}' echo "" echo "=== Reproduce: rm on read-only bind mount ===" docker run --rm --name nginx-ro-test \ -v /var/lib/xiaoxia-saas-staging/nginx-staging.conf:/etc/nginx/conf.d/default.conf:ro \ git.xiaoxiajianji.com/xiaoxia/xiaoxia-saas/xiaoxia-saas-web:387514c \ sh -c ' set -x echo "Before:" ls -la /etc/nginx/conf.d/ echo "Try rm (as entrypoint does):" rm -f /etc/nginx/conf.d/default.conf echo "rm exitcode=$?" echo "After rm:" ls -la /etc/nginx/conf.d/ echo "Test ln:" ln -s /etc/nginx/nginx-staging.conf /etc/nginx/conf.d/default.conf echo "ln exitcode=$?" ls -la /etc/nginx/conf.d/ echo "nginx -t:" nginx -t 2>&1 ' 2>&1 echo "" echo "=== Also test with NEW fixed image (9c0d4b1 if present) ===" docker images | grep xiaoxia-saas-web | head -5 REMOTE