You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure ML计算实例如何对外暴露监听端口的Gradio应用?

问题描述

我在Azure ML计算实例中运行了一个监听特定端口的Gradio应用,未使用Docker,仅为基础Python应用。我希望将该端口对外暴露,以便通过计算实例的URL/IP访问应用,当前无需考虑安全性,且不想使用Docker(了解自定义应用方案)。

已尝试的操作:

  • 通过sudo ufw allow <port>开放计算实例防火墙端口
  • 尝试以下访问方式:
    • http(s)://<compute-ip>:<port> - 超时
    • https://<compute>.<location>.instances.azureml.ms:<port> - 超时
    • https://<compute>-<port>.<location>.instances.azureml.ms/ - 可加载应用,但除根URL外其他路由均报错,提示{"detail":"Method Not Allowed"}

核心疑问:如何解决该问题?是否可通过配置计算实例允许路由URL?还是必须使用Docker+自定义应用方案?


解决方案

问题根源

Azure ML计算实例的反向代理机制会将https://<compute>-<port>.<location>.instances.azureml.ms/这类URL的请求转发到实例内部端口,但Gradio应用的非根路由(如/predict、/queue等)默认使用POST方法,Azure ML代理在转发时的路由映射或请求方法处理逻辑,会导致这类非根路由触发"Method Not Allowed"错误。

无需Docker的解决办法

  1. 调整Gradio应用启动参数
    启动Gradio时指定server_name="0.0.0.0"让应用监听所有网卡,同时设置root_path="/"确保路由与代理转发路径匹配:

    import gradio as gr
    
    def demo_func(input_text):
        return f"处理结果:{input_text}"
    
    if __name__ == "__main__":
        gr.Interface(fn=demo_func, inputs="text", outputs="text").launch(
            server_port=<你的目标端口>,
            server_name="0.0.0.0",
            root_path="/"
        )
    

    若使用Gradio Blocks模式,同样需添加这两个参数。

  2. 配置计算实例的网络安全组(NSG)
    进入Azure门户,找到目标Azure ML工作区→计算实例→对应实例→「网络」选项卡,确认关联的NSG入站规则已允许<目标端口>的TCP流量(仅开放该端口即可,无需额外配置)。

    注意:Azure ML计算实例的公网IP属于代理层,直接用IP+端口访问会超时,必须使用https://<compute>-<port>.<location>.instances.azureml.ms/格式的URL。

  3. 升级Gradio版本
    旧版本Gradio存在代理路由兼容性问题,执行以下命令升级到最新稳定版:

    pip install --upgrade gradio
    

是否必须使用Docker?

不需要。通过上述调整应用启动参数和NSG规则,即可在不依赖Docker的前提下正常访问所有路由。Docker+自定义应用方案属于生产级部署的规范方式,但开发场景下直接调整配置就能解决问题。


内容的提问来源于stack exchange,提问作者Vlad Iliescu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 09:55:28