Azure App Service如何处理与Docker容器的端口绑定?是否识别EXPOSE指令?
问题解答
关于Azure是否会自动检测Dockerfile的EXPOSE指令
是的,Azure App Service部署Linux容器 workload 时,默认会自动解析Dockerfile中的EXPOSE指令,获取容器内应用的监听端口作为内部转发的目标端口,无需用户额外手动配置端口映射规则。
服务可正常访问的底层机制
整个访问链路分为三层逻辑:
- 外部接入层:Azure App Service自带统一的边缘反向代理集群,所有对外的用户访问请求首先到达该层。该层默认对外暴露80(HTTP)和443(HTTPS)端口,同时自动托管Azure分配的
*.azurewebsites.net域名的SSL证书,完成HTTPS请求的加密解密(SSL终止),你访问的443端口就是这一层对外提供的服务端口。 - 内部转发层:反向代理层完成SSL解密后,会将纯HTTP请求通过Azure内部的隔离虚拟网络转发到运行你的Docker容器的计算节点。转发的目标端口默认优先读取Dockerfile中
EXPOSE声明的5000端口,刚好匹配你的.NET Core API配置的监听端口。 - 容器处理层:你的容器内的.NET Core API监听0.0.0.0:5000,正常接收内部转发过来的HTTP请求,处理完成后将响应原路返回,反向代理层再将响应封装为HTTPS报文返回给终端用户。
补充说明
如果需要手动指定转发的容器端口,可以在App Service的「配置」-「应用程序设置」中添加名为WEBSITES_PORT的环境变量,该配置的优先级高于自动检测EXPOSE指令的结果,适合多端口暴露、EXPOSE声明和实际监听端口不一致的场景。
内容的提问来源于stack exchange,提问作者R44
相关产品推荐
相关产品推荐

