Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

294
Views
¿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 answers
Answer question

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 Report

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!