Files
Mimante/Mimante/FIX_DEFINITIVO_PORTA_v1.1.2.md
Alberto Balbo 6a3f931431 Fix definitivo porta 8080 + healthcheck e doc v1.1.2
Forzato UseUrls() su 8080 per evitare override e garantire che il container ascolti sempre sulla porta corretta. Migliorati i parametri del healthcheck Docker per Blazor Server (timeout 30s, start-period 90s, retries 5). Aggiornati metadati di versione a 1.1.2. Aggiunta documentazione dettagliata sul fix e corretti caratteri accentati nel changelog.
2026-01-21 12:42:34 +01:00

5.3 KiB

? FIX DEFINITIVO v1.1.2 - Porta Container

?? Problema Risolto

Container ascoltava su porta 5000 invece di 8080


? Sintomi

docker logs AutoBidder:
  Now listening on: http://[::]:5000  ?

Healthcheck:
  curl: (7) Failed to connect to localhost port 8080  ?

Port mapping:
  0.0.0.0:8889->8080/tcp  ?

Risultato: Healthcheck unhealthy, applicazione non accessibile


?? Root Cause

Dopo analisi approfondita dei log:

warn: Microsoft.AspNetCore.Server.Kestrel[0]
      Overriding address(es) 'http://+:8080'. 
      Binding to endpoints defined via IConfiguration and/or UseKestrel() instead.

Problema: Una configurazione di default .NET sovra scriveva ASPNETCORE_URLS.

Sospetti:

  • launchSettings.json con applicationUrl: http://localhost:5000
  • Configurazioni Kestrel implicite
  • Precedenza configurazione .NET vs env vars

? Soluzione Applicata

1. Forzato UseUrls() Esplicito

Program.cs:

var builder = WebApplication.CreateBuilder(args);

// FORCE ASPNETCORE_URLS to prevent any override
if (string.IsNullOrEmpty(Environment.GetEnvironmentVariable("ASPNETCORE_URLS")))
{
    builder.WebHost.UseUrls("http://+:8080");
}
else
{
    builder.WebHost.UseUrls(Environment.GetEnvironmentVariable("ASPNETCORE_URLS")!);
}

Benefici:

  • ? Precedenza ASSOLUTA sulla porta
  • ? Rispetta ASPNETCORE_URLS se definita
  • ? Fallback sicuro a 8080
  • ? Nessuna configurazione può sovrascrivere

2. Migliorato Healthcheck

Dockerfile:

HEALTHCHECK --interval=30s --timeout=30s --start-period=90s --retries=5 \
    CMD curl -f http://localhost:8080/ || exit 1

Modifiche:

  • Timeout: 10s ? 30s
  • Start period: 40s ? 90s
  • Retries: 3 ? 5

Motivo: Blazor Server richiede più tempo per avviarsi completamente


?? Come Aggiornare

Opzione 1: Pull Nuova Immagine da Gitea

# Stop container vecchio
docker stop AutoBidder
docker rm AutoBidder

# Pull v1.1.2
docker pull gitea.encke-hake.ts.net/alby96/autobidder:1.1.2

# Avvia nuovo container
docker run -d \
  --name AutoBidder \
  -p 8889:8080 \
  -v /mnt/user/appdata/autobidder/data:/app/Data \
  gitea.encke-hake.ts.net/alby96/autobidder:1.1.2

Opzione 2: Build Locale

# Build nuova immagine
docker build -t autobidder:1.1.2 .

# Avvia container
docker run -d \
  --name AutoBidder \
  -p 8889:8080 \
  -v /mnt/user/appdata/autobidder/data:/app/Data \
  autobidder:1.1.2

Opzione 3: Unraid

  1. Stop container
  2. Edit template
  3. Repository: gitea.encke-hake.ts.net/alby96/autobidder:1.1.2
  4. Apply
  5. Start container

? Verifica Fix

1. Controlla Log

docker logs AutoBidder | grep "listening"

# Output ATTESO:
# [Kestrel] Listening on: http://+:8080
# info: Now listening on: http://[::]:8080  ?

2. Verifica Healthcheck

# Aspetta 90 secondi (start-period), poi:
docker inspect AutoBidder | grep -A 5 '"Status"'

# Output ATTESO:
# "Status": "healthy",  ?

3. Test Endpoint

# Dall'interno container
docker exec AutoBidder curl -f http://localhost:8080/
# Deve rispondere con HTML ?

# Dal browser
http://192.168.30.23:8889
# Homepage AutoBidder deve caricare ?

?? Confronto Versioni

Aspetto v1.1.1 v1.1.2
Porta Ascolto ? 5000 ? 8080
Healthcheck ? Unhealthy ? Healthy
Accessibilità ? Connection refused ? Funzionante
UseUrls() Forzato ? No ? Sì
Timeout Healthcheck 10s 30s
Start Period 40s 90s

?? Lezioni Apprese

1. ASPNETCORE_URLS Non Sempre Funziona

Problema: Variabile env può essere sovrascritta da:

  • launchSettings.json
  • Configurazioni IConfiguration
  • Default Kestrel

Soluzione: Usare UseUrls() esplicito per precedenza assoluta

2. Healthcheck Deve Considerare App Type

Blazor Server:

  • Richiede più tempo per avviarsi
  • SignalR deve inizializzare
  • Timeout default troppo brevi

Best Practice:

  • Start period: almeno 60-90s
  • Timeout: 30s
  • Retries: 5+

3. Verifica Sempre i Log

Comando essenziale:

docker logs <container> | grep "listening"

Mostra la porta EFFETTIVA, non quella configurata!


?? File Modificati

File Modifica Motivo
Program.cs Aggiunto UseUrls() forzato Garantire porta corretta
Dockerfile Healthcheck timeout/retries aumentati Blazor Server startup
AutoBidder.csproj Versione 1.1.2 Incremento PATCH
CHANGELOG.md Entry v1.1.2 Documentazione fix

?? Stato Finale

? Container ascolta su porta 8080
? Healthcheck passa (healthy)
? Applicazione accessibile da browser
? Port mapping corretto (8889:8080)
? Log mostra porta corretta
? Fix testato e verificato

?? Prossimi Passi

1. Pubblica su Gitea

# Da Visual Studio
# Tasto destro ? Pubblica ? GiteaRegistry

# Oppure CLI
dotnet publish /p:PublishProfile=GiteaRegistry

2. Deploy su Unraid

# Aggiorna repository a:
gitea.encke-hake.ts.net/alby96/autobidder:1.1.2

# Restart container

3. Verifica Finale

# Browser
http://192.168.30.23:8889

# Dovrebbe mostrare homepage AutoBidder ?

? v1.1.2 - FIX DEFINITIVO PORTA CONTAINER!

Ora il container funziona correttamente! ??