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 que esperaba que el puerto 80 fuera el predeterminado y poder acceder a la aplicación en ejecución.
Por ejemplo, podría ejecutar el siguiente comando y, a continuación, acceder a la aplicación localmente en el puerto 8000, que se asigna 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
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.
Acción recomendada
Hay dos maneras de responder a este cambio importante:
- (Acción recomendada) Establezca explícitamente las variables de entorno
ASPNETCORE_HTTP_PORTS
,ASPNETCORE_HTTPS_PORTS
yASPNETCORE_URLS
en el puerto deseado. Ejemplo:docker run --rm -it -p 8000: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 8000: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 8000:80 -e ASPNETCORE_URLS=http://*:80 <my-app>
.
Si usa Kubernetes o Docker Compose, debe cambiar el puerto por esos esquemas. Para obtener ejemplos, consulte Uso de .NET con Kubernetes.
Si usa servicios de contenedor de Azure para hospedar la aplicación contenedora de ASP.NET Core, debe actualizar el entorno de contenedor para establecer el puerto deseado:
- Para Azure App Service, establezca
WEBSITES_PORT
mediante la CLI o en el portal. - Para Azure Container Apps, puede cambiar el puerto como parte de la creación de recursos.
- Para Azure Container Instances, puede cambiar el puerto como parte de la creación de recursos.
API afectadas
Ninguno.