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

基于Docker的Python v2函数应用报错:WorkerConfig for runtime: python not found

排查与修复基于Docker的Python v2 Azure函数部署问题

1. 先搞定核心错误「WorkerConfig for runtime: python not found」

这个错误是导致部署失败、触发器不显示的根源,优先排查以下几点:

  • 必须用官方Azure Functions Python镜像:Dockerfile基础镜像不能随便选,直接用mcr.microsoft.com/azure-functions/python:4-python3.10(替换成你本地用的Python版本,比如3.9/3.11),这类镜像预装了Python运行时和Azure Functions Worker,不会缺配置。
  • 强制设置环境变量:Dockerfile里必须加这几行,确保Worker能识别Python运行时:
    ENV AzureWebJobsScriptRoot=/home/site/wwwroot
    ENV FUNCTIONS_WORKER_RUNTIME=python
    ENV FUNCTIONS_EXTENSION_VERSION=~4
    
  • 确认代码路径正确:Dockerfile的COPY命令要把所有函数文件(function_app.py、requirements.txt等)复制到/home/site/wwwroot目录,比如:
    COPY requirements.txt /home/site/wwwroot/
    RUN pip install --no-cache-dir -r /home/site/wwwroot/requirements.txt
    COPY . /home/site/wwwroot/
    

2. 验证Python v2触发器写法(别用v1的老语法)

Python v2的触发器注册方式和v1完全不同,写错了门户就识别不出来:

  • 定时器触发器正确示例:
    import azure.functions as func
    import logging
    
    app = func.FunctionApp()
    
    @app.timer_trigger(schedule="0 */5 * * * *", arg_name="myTimer", run_on_startup=True)
    def timer_trigger(myTimer: func.TimerRequest) -> None:
        if myTimer.past_due:
            logging.info('定时器已超时')
        logging.info('Python定时器触发器执行成功')
    
  • HTTP触发器正确示例:
    @app.route(route="http_trigger", auth_level=func.AuthLevel.ANONYMOUS)
    def http_trigger(req: func.HttpRequest) -> func.HttpResponse:
        logging.info('Python HTTP触发器处理请求')
        return func.HttpResponse("HTTP触发器响应内容")
    

所有触发器必须注册到func.FunctionApp()实例上,不能有语法错误。

3. 核对Azure门户与本地配置

  • 本地local.settings.json里必须包含:
    {
      "IsEncrypted": false,
      "Values": {
        "FUNCTIONS_WORKER_RUNTIME": "python",
        "FUNCTIONS_EXTENSION_VERSION": "~4",
        "AzureWebJobsStorage": "你的存储账户连接字符串"
      }
    }
    
  • 部署到Azure后,去门户「配置」→「应用程序设置」确认:
    • FUNCTIONS_WORKER_RUNTIME值为python
    • FUNCTIONS_EXTENSION_VERSION值为~4
    • 容器设置里的镜像路径、标签要和本地构建的一致,启动命令留空(官方镜像自带启动逻辑)

4. 本地预验证避免重复部署踩坑

  • 先在本地用func start测试,看终端输出里有没有加载触发器的日志,确保无语法错误
  • 本地构建Docker镜像并运行,验证功能:
    docker build -t my-python-func .
    docker run -p 8080:80 -e AzureWebJobsStorage="你的连接字符串" my-python-func
    

访问http://localhost:8080/api/http_trigger看是否返回响应,同时查看容器日志确认定时器触发器是否正常启动


内容的提问来源于stack exchange,提问作者Vaishnavi Vaishu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 22:51:10