El puerto de ASP.NET Core predeterminado ha cambiado de 80 a 8080

El puerto de ASP.NET Core predeterminado configurado en imágenes de contenedor de .NET se ha actualizado del puerto 80 al 8080.

También hemos agregado la nueva ASPNETCORE_HTTP_PORTS variable de entorno como una alternativa más sencilla a ASPNETCORE_URLS. La nueva variable espera una lista delimitada por punto y coma de los números de puertos, mientras que la variable anterior esperaba una sintaxis más complicada.

Las aplicaciones creadas con la API anterior WebHost.CreateDefaultBuilder() no respetarán la nueva variable de entorno ASPNETCORE_HTTP_PORTS. Y ahora que ASPNETCORE_URLS ya no se establece automáticamente, cambiarán para usar una dirección URL predeterminada de http://localhost:5000, en lugar de http://*:80, como antes.

Comportamiento anterior

Antes de .NET 8, podía ejecutar un contenedor esperando que el puerto 80 fuera el predeterminado y poder acceder a la aplicación en ejecución.

Por ejemplo, la ejecución del siguiente comando le permitía acceder a la aplicación localmente en el puerto 8000, que está asignado al puerto 80 en el contenedor:

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

Comportamiento nuevo

A partir de .NET 8, si se asigna al puerto 80 en el contenedor sin establecer explícitamente el puerto ASP.NET Core usado en el contenedor en 80, se producirá un error en cualquier intento de conexión a ese puerto asignado.

Por ejemplo, si ejecuta el siguiente comando, no podrá conectarse a la aplicación localmente mediante el puerto 8000.

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

En su lugar, cambie el comando para usar el puerto 8080 dentro del contenedor:

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

Puede ver la diferencia de comportamiento en los ejemplos siguientes.

Puerto de asignación 80 (caso de error):

$ 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

Puerto de asignación 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

Puerto de asignación 80 con ASPNETCORE_HTTP_PORTS establecido en el puerto 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

Si usa Kubernetes o Docker Compose, deberá cambiar el puerto por esos esquemas. Consulte Uso de .NET con Kubernetes para obtener ejemplos.

Versión introducida

.NET 8 Preview 1

Tipo de cambio

Este es un cambio de comportamiento.

Motivo del cambio

El cambio en el número de puerto se hizo por la necesidad de proporcionar una buena experiencia de uso al cambiar a un usuario non-root. La ejecución como usuario non-root requiere el uso de un puerto sin privilegios en algunos entornos. Dado que el puerto 80, el anterior puerto predeterminado, es un puerto con privilegios, se actualizó el predeterminado al puerto 8080, que es un puerto sin privilegios.

Hay dos maneras de responder a este cambio importante:

  • Recomendado: establezca explícitamente las variables de entorno ASPNETCORE_HTTP_PORTS, ASPNETCORE_HTTPS_PORTS y ASPNETCORE_URLS en el puerto deseado. Ejemplo: docker run --rm -it -p 9999:80 -e ASPNETCORE_HTTP_PORTS=80 <my-app>
  • Actualice los comandos y la configuración existentes que se basan en el puerto predeterminado esperado del puerto 80 para hacer referencia al puerto 8080 en su lugar. Ejemplo: docker run --rm -it -p 9999:8080 <my-app>

Si la aplicación se creó con el método anterior WebHost.CreateDefaultBuilder(), establezca ASPNETCORE_URLS (no ASPNETCORE_HTTP_PORTS). Ejemplo: docker run --rm -it -p 9999:80 -e ASPNETCORE_URLS=http://*:80 <my-app>

API afectadas

Ninguno.

Consulte también