La porta predefinita ASP.NET Core è cambiata da 80 a 8080

La porta predefinita ASP.NET Core configurata nelle immagini del contenitore .NET è stata aggiornata dalla porta 80 alla porta 8080.

È stata aggiunta anche la nuova variabile di ambiente ASPNETCORE_HTTP_PORTS come alternativa più semplice a ASPNETCORE_URLS. La nuova variabile prevede un elenco di numeri di porta delimitati da punto e virgola, mentre la variabile precedente prevede una sintassi più complessa.

Le app compilate usando l'API WebHost.CreateDefaultBuilder() precedente non rispettano la nuova variabile di ambiente ASPNETCORE_HTTP_PORTS E ora che ASPNETCORE_URLS non è più impostato automaticamente, passeranno all'utilizzo di un URL predefinito di http://localhost:5000, anziché http://*:80 come avveniva in precedenza.

Comportamento precedente

Prima di .NET 8, era possibile eseguire un contenitore che prevedeva la porta 80 come predefinita e si poteva accedere all'app in esecuzione.

Ad esempio, è possibile eseguire il comando seguente e quindi accedere all'app in locale sulla porta 8000, mappata alla porta 80 all’interno del contenitore:

docker run --rm -it -p 8000:80 <my-app>

Nuovo comportamento

A partire da .NET 8, se si esegue il mapping alla porta 80 nel contenitore senza impostare in modo esplicito la porta ASP.NET Core utilizzata nel contenitore sul corrispondente valore 80, qualsiasi tentativo di connessione a tale porta mappata avrà esito negativo.

Ad esempio, se si esegue il comando seguente, non sarà possibile connettersi all'applicazione in locale usando la porta 8000.

docker run --rm -it -p 8000:80 <my-app>

Modificare invece il comando per utilizzare la porta 8080 all'interno del contenitore:

docker run --rm -it -p 8000:8080 <my-app>

È possibile visualizzare la differenza di comportamento negli esempi seguenti.

Mapping della porta 80 (caso di errore):

$ docker run --rm -d -p 8000:80 mcr.microsoft.com/dotnet/samples:aspnetapp
ba88b746bd7097e503f8ab6e5320c595640e242f6de4f734412944a0e2836acc
$ curl http://localhost:8000/Environment
curl: (56) Recv failure: Connection reset by peer
$ docker kill ba88b746bd7097e503f8ab6e5320c595640e242f6de4f734412944a0e2836acc
ba88b746bd7097e503f8ab6e5320c595640e242f6de4f734412944a0e2836acc

Mapping della porta 8080:

$ docker run --rm -d -p 8000:8080 mcr.microsoft.com/dotnet/samples:aspnetapp
74d866bdaa8a5a09e4a347bba17ced321d77a2524a0853294a123640bcc7f21d
$ curl http://localhost:8000/Environment
{"runtimeVersion":".NET 8.0.0-rc.1.23419.4","osVersion":"Alpine Linux v3.18","osArchitecture":"Arm64","user":"root","processorCount":4,"totalAvailableMemoryBytes":4123820032,"memoryLimit":0,"memoryUsage":30081024,"hostName":"74d866bdaa8a"}
$ docker kill 74d866bdaa8a5a09e4a347bba17ced321d77a2524a0853294a123640bcc7f21d
74d866bdaa8a5a09e4a347bba17ced321d77a2524a0853294a123640bcc7f21d

Mapping della porta 80 con ASPNETCORE_HTTP_PORTS impostato sulla porta 80:

$ docker run --rm -d -p 8000:80 -e ASPNETCORE_HTTP_PORTS=80 mcr.microsoft.com/dotnet/samples:aspnetapp
3cc86b4b3ea1a7303d83171c132b0645d4adf61d80131152936b01661ae82a09
$ curl http://localhost:8000/Environment
{"runtimeVersion":".NET 8.0.0-rc.1.23419.4","osVersion":"Alpine Linux v3.18","osArchitecture":"Arm64","user":"root","processorCount":4,"totalAvailableMemoryBytes":4123820032,"memoryLimit":0,"memoryUsage":95383552,"hostName":"3cc86b4b3ea1"}
$ docker kill 3cc86b4b3ea1a7303d83171c132b0645d4adf61d80131152936b01661ae82a09
3cc86b4b3ea1a7303d83171c132b0645d4adf61d80131152936b01661ae82a09

Versione introdotta

.NET 8 Preview 1

Tipo di modifica

Questa modifica è una modifica funzionale.

Motivo della modifica

La modifica al numero di porta è stata apportata a causa della necessità di offrire un'esperienza di usabilità ottimale quando si passa a un utente non-root. In alcuni ambienti l'esecuzione come utente non-root richiede l'uso di una porta senza privilegi. Poiché la porta 80, che era quella in precedenza predefinita, è una porta dotata di privilegi, l'impostazione predefinita è stata aggiornata alla porta 8080, ovvero una porta priva di privilegi.

Esistono due modi per rispondere a questa modifica che causa un'interruzione:

  • Azione consigliata: impostare in modo esplicito le variabili di ambiente ASPNETCORE_HTTP_PORTS, ASPNETCORE_HTTPS_PORTS e ASPNETCORE_URLS sulla porta desiderata. Esempio: docker run --rm -it -p 8000:80 -e ASPNETCORE_HTTP_PORTS=80 <my-app>
  • Aggiornare i comandi e la configurazione esistenti, basati sull’aspettativa della porta predefinita (ovvero la porta 80), per fare invece riferimento alla porta 8080. Esempio: docker run --rm -it -p 8000:8080 <my-app>

Se l'app è stata compilata usando il metodo WebHost.CreateDefaultBuilder() precedente, impostare ASPNETCORE_URLS (non ASPNETCORE_HTTP_PORTS). Esempio: docker run --rm -it -p 8000:80 -e ASPNETCORE_URLS=http://*:80 <my-app>.

Se si usa Kubernetes o Docker Compose, è necessario modificare la porta in base a tali schemi. Ad esempio, vedere Utilizzo di .NET con Kubernetes.

Se si usano i servizi contenitore di Azure per ospitare l'app contenitore ASP.NET Core, è necessario aggiornare l'ambiente del contenitore per impostare la porta desiderata:

API interessate

Nessuno.

Vedi anche