首页 文章

为什么aspnet核心从Docker内部的端口80开始?

提问于
浏览
16

TL;DR: 为什么aspnet核心应用程序在Docker镜像中的端口80上运行,但在docker镜像之外运行5000 .

Elaborate

我浏览了这里找到的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

等待 . 笏? Why is the aspnet core app running on port 80? 当我直接从机器上运行它时,它在端口5000上运行 . 没有配置文件更改 .

我怀疑它与基本的docker图像有关,但是在docker中还不够熟练以跟踪它 .

1 回答

  • 37

    microsoft/aspnetcore-build 容器构建在 microsoft/aspnetcore 容器之上 . dockerhub page for that说:

    关于端口的注释此图像将ASPNETCORE_URLS环境变量设置为http://:80,这意味着如果您没有明确地在应用程序中设置URL,例如通过Program.cs中的app.UseUrl,那么您的应用程序将正在收听容器内的端口80 .

    所以这是主动将端口设置为80的容器 . 如果需要,可以通过在_2926596中执行此操作来覆盖它:

    ENV ASPNETCORE_URLS = http://:5000

    此外,值得注意的是,由于您使用的是docker命令,无论是直接运行应用程序还是在容器中运行应用程序,您仍然可以在 http://localhost:5000 访问该应用程序 .

相关问题