web-dev-qa-db-fra.com

Pourquoi aspnet core démarre-t-il sur le port 80 à partir de Docker?

TL; DR: Pourquoi une application principale aspnet s'exécute-t-elle sur le port 80 à partir d'une image Docker, mais 5 000 en dehors d'une image Docker?.

Élaborer

Je suis passé par le didacticiel d'aspnet core/docker que l'on trouve ici: https://docs.Microsoft.com/en-us/dotnet/core/docker/building-net-docker-images

À mi-chemin de la page, je lance l'application avec les instructions suivantes:

dotnet run

Entre autres choses, ceci affiche ceci:

Now Listening on: http://localhost:5000

Génial. C'est ce à quoi je m'attendais. La prochaine étape du didacticiel consiste à démarrer exactement la même application à partir d’une image Docker.

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

Cela se traduit par

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

Attendez. Wat? Pourquoi l'application principale Aspnet s'exécute-t-elle sur le port 80? Elle s'exécutait sur le port 5000 lorsque je l'ai exécutée directement à partir de la machine. Il n'y a eu aucune modification du fichier de configuration.

Je soupçonne que cela a quelque chose à voir avec les images du docker de base, mais je ne suis pas encore assez expérimenté en docker pour le localiser.

27

Le Microsoft/aspnetcore-build Le conteneur est construit sur le Microsoft/aspnetcore récipient. La page dockerhub pour cela dit:

Une note sur les ports

Cette image définit la variable d'environnement ASPNETCORE_URLS sur http: // +: 8 , ce qui signifie que si vous n'avez pas explicitement défini d'URL dans votre application, via app.UseUrl dans votre Program.cs, par exemple, puis votre application sera à l'écoute sur le port 80 à l'intérieur du conteneur.

Il s’agit donc du conteneur qui définit activement le port sur 80. Vous pouvez le remplacer, si vous le souhaitez, en procédant ainsi dans votre Dockerfile:

ENV ASPNETCORE_URLS = http: // +: 50

En outre, il convient de noter qu’en raison de la commande docker que vous utilisez, vous pourrez toujours accéder à l’application à partir de http://localhost:5000 si vous exécutez l'application directement ou dans un conteneur.

49
Omair Majid

Si vous utilisez . NET Core 2.2 ou supérieur, vous devez utiliser une autre image: mcr.Microsoft.com/dotnet/core/aspnet:2.2. Dans ce cas, spécifier ENV ASPNETCORE_URLS=http://+:5000 N'aide pas. Vous pouvez toujours forcer l'application à écouter le port 5000 à l'aide de UseUrls("http://*:5000") dans le fichier Programs.cs.

4
Rroman