Files
Intune-Manager/docker/docker-entrypoint.sh
T
marcoandClaude Opus 4.8 f40be6e4bd Docker: interner nginx statt socat (Host-Header -> localhost)
Ursache des 404 bei Zugriff über IP/Proxy: .NET-HttpListener bedient den Prefix
http://localhost:8077/ nur bei Host: localhost. socat (L4) reicht den originalen
Host-Header durch -> 404. Jetzt sitzt ein winziger nginx im Container davor, der
den Host-Header auf localhost umschreibt (Upstream [::1]:8077, IPv4 als Fallback).
App-Code bleibt unverändert.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-21 14:35:24 +02:00

31 lines
1.3 KiB
Bash
Executable File

#!/usr/bin/env bash
# Startet die App unveraendert (bindet auf localhost:APP_PORT) und stellt einen
# internen nginx davor, der den Host-Header auf "localhost" umschreibt.
#
# WARUM nginx statt socat: .NET-HttpListener bedient den Prefix
# http://localhost:APP_PORT/ NUR bei Host: localhost. socat (reiner TCP-Proxy)
# reicht den originalen Host-Header durch -> von aussen 404. nginx schreibt den
# Host-Header um -> jeder Zugriffsweg funktioniert, ohne den App-Code zu aendern.
set -e
: "${APP_PORT:=8077}"
# App im Hintergrund starten. -NoBrowser: im Container kein Desktop/open.
pwsh -NoProfile -File /app/Start.ps1 -NoBrowser -Port "${APP_PORT}" &
APP_PID=$!
# Best-effort warten, bis der App-Listener antwortet (IPv6 oder IPv4).
# nginx wuerde sonst kurz 502 liefern, bis die App oben ist.
for i in $(seq 1 30); do
if (exec 3<>"/dev/tcp/::1/${APP_PORT}") 2>/dev/null; then exec 3>&-; break; fi
if (exec 3<>"/dev/tcp/127.0.0.1/${APP_PORT}") 2>/dev/null; then exec 3>&-; break; fi
kill -0 "$APP_PID" 2>/dev/null || { echo "[entrypoint] App-Prozess beendet - Abbruch."; wait "$APP_PID"; exit $?; }
sleep 1
done
echo "[entrypoint] Starte nginx (Host-Rewrite -> localhost) auf :8080"
nginx -g 'daemon off;' &
# Am Leben des App-Prozesses haengen (Container endet, wenn die App endet).
wait "$APP_PID"