72 votes

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

TL;DR: Pourquoi un réseau de base application de fonctionner sur le port 80 de l'intérieur d'un menu fixe de l'image, mais 5000 à l'extérieur d'un menu fixe de l'image.

Élaborer

Je suis allé à travers le réseau de base / docker tutoriel trouvé ici: https://docs.microsoft.com/en-us/dotnet/core/docker/building-net-docker-images

Mi-chemin à travers la page, j'ai démarrer l'application avec le suivant, comme le prescrit:

dotnet run

Entre autres choses, cette affiche ceci:

Now Listening on: http://localhost:5000

Grand. Qu'est ce que j'attendais. La prochaine chose que dans le tuto pour démarrer exactement la même application à partir d'un menu fixe de l'image.

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

Il en résulte

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

Attendre. Wat? Pourquoi le réseau de base application qui s'exécute sur le port 80? Il a été exécuté sur le port 5000, quand je l'ai exécuté directement à partir de la machine. Il n'y avait pas de modifications du fichier de configuration.

Je suppose que cela a quelque chose à voir avec la base de docker images, mais je ne suis pas encore assez douée dans le panneau de suivre tout cela.

102voto

omajid Points 3363

L' microsoft/aspnetcore-build conteneur s'appuie sur le dessus de l' microsoft/aspnetcore conteneur. Le dockerhub page qui dit:

Une note sur les ports

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

Donc, c'est le conteneur activement paramètre le port 80. Vous pouvez la remplacer, si vous le souhaitez, en faisant cela, dans votre Dockerfile:

ENV ASPNETCORE_URLS=http://+:5000

Aussi, il est intéressant de noter que, en raison du panneau de commande que vous utilisez, vous serez toujours en mesure d'accéder à l'application à l' http://localhost:5000 si vous exécutez l'application directement ou dans un conteneur.

10voto

Rroman Points 155

Si vous utilisez .NET Core 2.2 ou une version ultérieure, 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 en utilisant UseUrls("http://*:5000") dans le fichier Programs.cs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X