Azure App Service中Docker容器内Kestrel应监听的URL是什么?
容器化ASP.NET Core部署Azure App Service的Kestrel监听配置
为什么localhost:8080不行?
你可以把localhost理解成容器自己跟自己说话的专属地址,只有容器内部的程序才能访问这个地址。而Azure App Service的请求是从外部(或App Service的宿主环境)发过来的,相当于有人在你家门外敲门,但你只把耳朵贴在自家卧室门上(监听localhost),自然听不到敲门声。所以用localhost的话,App Service的请求根本传不到Kestrel上。
为什么0.0.0.0:8080是正确的?
0.0.0.0是一个通配符地址,意思是监听容器上所有能接收外部请求的网络接口,相当于你把耳朵贴在自家所有门上,不管敲门声来自哪个方向都能听到。这样App Service的反向代理(负责把外部HTTPS请求转接到容器的中间层)就能顺利把请求传给Kestrel了。
Azure App Service的端口规则要注意什么?
不用你手动设置-p 443:8080这种端口映射,App Service已经帮你做好了:
- 外部用户访问
https://myapp.azurewebsites.net时,请求先到App Service的443端口(HTTPS) - App Service会自动处理SSL加密解密,然后把HTTP请求转发到容器的8080端口(这是App Service对容器的默认要求,也可以改成80,但8080更常用)
具体配置方法
有两种简单的方式让Kestrel监听0.0.0.0:8080:
用环境变量(推荐,不用改代码)
在Dockerfile里添加一行:ENV ASPNETCORE_URLS=http://0.0.0.0:8080或者在Azure App Service的“配置-应用程序设置”里新增环境变量
ASPNETCORE_URLS,值设为http://0.0.0.0:8080修改代码
在Program.cs里配置Kestrel:var builder = WebApplication.CreateBuilder(args); // 配置Kestrel监听地址 builder.WebHost.ConfigureKestrel(options => { options.ListenAnyIP(8080); // 等价于监听0.0.0.0:8080 }); // 其他代码... var app = builder.Build(); // ...
深入研究关键词
- Kestrel 监听地址配置
- Azure App Service 容器端口转发
- Docker 桥接网络
- ASPNETCORE_URLS 环境变量
- Azure App Service SSL 终止
内容的提问来源于stack exchange,提问作者Tri
相关产品推荐
相关产品推荐

