Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

288
Vistas
¿Por qué aspnet core comienza en el puerto 80 desde Docker?

TL; DR: ¿Por qué una aplicación central de aspnet se ejecuta en el puerto 80 desde una imagen de Docker, pero 5000 fuera de una imagen de Docker?

Elaborar

Revisé el tutorial de aspnet core/docker que se encuentra aquí: https://docs.microsoft.com/en-us/dotnet/core/docker/building-net-docker-images

A la mitad de la página, empiezo la aplicación con lo siguiente según lo prescrito:

 dotnet run

Entre otras cosas, esto imprime esto:

 Now Listening on: http://localhost:5000

Genial. Eso es lo que esperaba. Lo siguiente en el tutorial es iniciar exactamente la misma aplicación desde una imagen de Docker.

 docker build -t aspnetapp . docker run -it --rm -p 5000:80 --name aspnetcore_sample aspnetapp

Esto resulta en

 Now listening on: http://[::]:80

Esperar. ¿Qué? ¿Por qué la aplicación principal de aspnet se ejecuta en el puerto 80? Se estaba ejecutando en el puerto 5000 cuando lo ejecuté directamente desde la máquina. No hubo cambios en el archivo de configuración.

Sospecho que tiene algo que ver con las imágenes base de la ventana acoplable, pero aún no soy lo suficientemente hábil en la ventana acoplable para rastrear esto.

over 4 years ago · Santiago Trujillo
4 Respuestas
Responde la pregunta

0

El contenedor microsoft/aspnetcore-build se construye sobre el contenedor microsoft/aspnetcore . La página de dockerhub para eso dice:

Una nota sobre los puertos

Esta imagen establece la variable de entorno ASPNETCORE_URLS en http://+:80 , lo que significa que si no ha establecido explícitamente una URL en su aplicación, a través de app.UseUrl en su Program.cs, por ejemplo, su aplicación estará escuchando en el puerto. 80 dentro del contenedor.

Entonces, este es el contenedor que establece activamente el puerto en 80. Puede anularlo, si lo desea, haciendo esto en su Dockerfile :

ENV ASPNETCORE_URLS= http://+:5000

Además, vale la pena señalar que debido al comando docker que está utilizando, aún podrá acceder a la aplicación en http://localhost:5000 , ya sea que esté ejecutando la aplicación directamente o en un contenedor.

over 4 years ago · Santiago Trujillo Denunciar

0

Si usa .NET Core 2.2 o superior, debe usar otra imagen: mcr.microsoft.com/dotnet/core/aspnet:2.2 . En ese caso, especificar ENV ASPNETCORE_URLS=http://+:5000 no ayuda. Todavía puede obligar a la aplicación a escuchar el puerto 5000 usando UseUrls("http://*:5000") en el archivo Programs.cs.

over 4 years ago · Santiago Trujillo Denunciar

0

sin dockerfile, puede configurar cualquier puerto fuera del contenedor docker. ( .NET Core 3.1 , .NET 5 ) con argumentos acoplables

 docker run -it --rm -p 5000:80 -p 5001:443 -e ASPNETCORE_HTTPS_PORT=https://+:5001 -e ASPNETCORE_URLS=http://+:5000 --name aspnetcore_sample aspnetapp

más detalles :

https://github.com/dotnet/dotnet-docker/blob/17c1eec582e84ba9cbea5641cd9cc13fe1a41c39/samples/run-aspnetcore-https-development.md#L85

https://github.com/dotnet/dotnet-docker/blob/5926a01d44bd47b6202ba71e30f9faa08fad1aec/samples/run-in-sdk-container.md#L109

over 4 years ago · Santiago Trujillo Denunciar

0

La limitación de pila de redes de Windows juega duro en Windows Docker Container. Vídeo de referencia

docker run -it --rm -p {Puerto de la computadora host}:{Puerto del contenedor} --name {nombre del contenedor} {nombre de la imagen} docker run -it --rm -p 5000:8090 --name dockerwebapp9172020c dockerwebapp9172020

Lo que significa el comando anterior: el puerto de su máquina (5000) está asignado al puerto del contenedor (8090). No significa que la aplicación se ejecute en el contenedor escuchando en el PUERTO: 8090. Consulte el archivo acoplable a continuación sobre cómo asignar el puerto del contenedor al puerto de la aplicación.

 FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-nanoserver-1903 AS base WORKDIR /app EXPOSE 8090 FROM mcr.microsoft.com/dotnet/core/sdk:3.1-nanoserver-1903 AS build WORKDIR /src COPY ["DockerWebApp/DockerWebApp.csproj", "DockerWebApp/"] RUN dotnet restore "DockerWebApp/DockerWebApp.csproj" COPY . . WORKDIR "/src/DockerWebApp" RUN dotnet build "DockerWebApp.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "DockerWebApp.csproj" -c Release -o /app/publish FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENV ASPNETCORE_URLS http://*:8090 ENTRYPOINT ["dotnet", "DockerWebApp.dll"]

Probar la limitación de pila de red de Windows no permitirá ejecutar el siguiente comando directamente.

 http://localhost:5000

Sigamos con la primera solución. Solución alternativa: 1 Golpee directamente el contenedor. (Debajo del comando en PowerShell o Símbolo del sistema)

ps c:/>docker inspect f31e8add55af

Encuentre la dirección IP de un contenedor desde el nodo "REDES" al final y ejecute el comando en el navegador.

 http://{container IP}:8090

Workaroud-2 desde el host de Windows

Primero encontremos la dirección IP de su máquina.

 c:\>ipconfig

Una vez que encuentre la IP de su máquina, ejecute el siguiente comando.

 http://{Your Machine IP}:5000

ya que 5000 está asignado al puerto del contenedor (8090) y la aplicación principal de asp.net también está escuchando el puerto 8090 dentro del contenedor.

Referencia: Contenedores de Windows y Docker: 101

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda