TL; DR: 为什么aspnet核心应用程序在Docker映像中的端口80上运行,而在Docker映像之外的端口上运行5000。
阐述
我浏览了在这里找到的aspnet core / docker教程:https : //docs.microsoft.com/zh- cn/dotnet/core/docker/building-net-docker- images
在页面的一半处,我按照规定启动了以下应用程序:
dotnet run
除其他外,这将打印以下内容:
Now Listening on: http://localhost:5000
大。那是我的期望。本教程的下一步是从Docker映像中启动完全相同的应用程序。
docker build -t aspnetapp . docker run -it --rm -p 5000:80 --name aspnetcore_sample aspnetapp
这导致
Now listening on: http://[::]:80
等待。? 为什么aspnet核心应用程序在端口80上运行? 当我直接从计算机运行它时,它在端口5000上运行。没有配置文件更改。
我怀疑它与基本docker映像有关,但是对docker的掌握还不够熟练。
该microsoft/aspnetcore-build容器建立在顶部microsoft/aspnetcore容器。在该dockerhub页说:
microsoft/aspnetcore-build
microsoft/aspnetcore
端口说明 此图像将ASPNETCORE_URLS环境变量设置为http:// +:80,这意味着,如果您尚未通过Application.cs中的app.UseUrl在应用程序中显式设置URL,则您的应用程序将在端口上侦听80在容器内。
端口说明
此图像将ASPNETCORE_URLS环境变量设置为http:// +:80,这意味着,如果您尚未通过Application.cs中的app.UseUrl在应用程序中显式设置URL,则您的应用程序将在端口上侦听80在容器内。
因此,这是容器主动将端口设置为80。如果需要,您可以通过在您的端口中进行设置来覆盖它Dockerfile:
Dockerfile
ENV ASPNETCORE_URLS = http:// +:5000
另外,值得注意的是,由于使用了docker命令,http://localhost:5000无论您是直接运行应用程序还是在容器中运行应用程序,您仍然可以访问该应用程序。
http://localhost:5000