为什么aspnet core从Docker内部的80端口启动?
问题:为什么aspnet core从Docker内部的80端口启动?
TLDR: 为什么一个 ASP 网络核心应用程序在 Docker 映像内的端口 80 上运行,但在 Docker 映像外的 5000 端口上运行。
精心制作的
我浏览了此处找到的 aspnet 核心/docker 教程:https://docs.microsoft.com/en-us/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
容器之上。该](https://hub.docker.com/r/microsoft/aspnetcore/)的[dockerhub 页面说:
关于端口的说明
此图像将 ASPNETCORE_URLS 环境变量设置为http://+:80这意味着如果您没有在应用程序中明确设置 URL,例如通过 Program.cs 中的 app.UseUrl,那么您的应用程序将监听容器内的 80 端口。
所以这是容器主动将端口设置为 80。如果需要,您可以通过在Dockerfile
中执行此操作来覆盖它:
ENV ASPNETCORE_URLSu003dhttp://+:5000
另外,值得注意的是,由于您使用的是 docker 命令,无论您是直接运行应用程序还是在容器中运行应用程序,您仍然可以在http://localhost:5000
访问应用程序。
更多推荐
所有评论(0)