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

Azure Functions容器部署后Timer Trigger函数无法触发求助

Azure Functions Docker部署Timer Trigger函数无法触发问题

我在Azure Functions上部署使用Selenium的Timer Trigger函数时,采用Docker容器方式部署,出现函数无法触发的问题。本地运行时函数可正常触发,但部署到Azure后无任何异常却无法触发;此前部署时虽因Docker问题出现异常但函数仍会触发,多次重新部署后函数完全不再触发,测试配置为每5分钟触发一次。函数概览显示已更新运行时版本,但未将函数添加到Functions列表中(截图:函数列表未显示)


函数头部代码

app = func.FunctionApp()

@app.schedule(schedule="0 */5 * * * *", arg_name="mytimer", run_on_startup=False,
              use_monitor=False) 

def main(mytimer: func.TimerRequest) -> None:
    utc_timestamp = datetime.datetime.now(datetime.timezone.utc).replace(
        tzinfo=datetime.timezone.utc).isoformat()

    if mytimer.past_due:
        logging.info('The timer is past due!')

    logging.info('Python timer trigger function ran at %s', utc_timestamp)
    logging.info('Python timer trigger function executed.')
    run()

绑定与配置文件

function.json

{
    "scriptFile": "function_app.py",
    "bindings": [
      {
        "name": "mytimer",
        "type": "timerTrigger",
        "direction": "in",
        "schedule": "0 */5 * * * *"
      }
    ]
  }

host.json

{
  "version": "2.0",
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[4.*, 5.0.0)"
  }
}

local.settings.json

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "",
    "FUNCTIONS_WORKER_RUNTIME": "python",
    "AzureWebJobsFeatureFlags": "EnableWorkerIndexing"
  }
}

Dockerfile

FROM mcr.microsoft.com/azure-functions/python:4-python3.10

# 0. Install essential packages
RUN apt-get update \
    && apt-get install -y \
        build-essential \
        cmake \
        git \
        wget \
        unzip \
        unixodbc-dev \
    && rm -rf /var/lib/apt/lists/*

# 1. Install Chrome (root image is debian)
ARG CHROME_VERSION="google-chrome-stable"
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
  && echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list \
  && apt-get update -qqy \
  && apt-get -qqy install \
    ${CHROME_VERSION:-google-chrome-stable} \
  && rm /etc/apt/sources.list.d/google-chrome.list \
  && rm -rf /var/lib/apt/lists/* /var/cache/apt/*

# 2. Install Chrome driver used by Selenium
RUN LATEST=$(wget -q -O - http://chromedriver.storage.googleapis.com/LATEST_RELEASE) && \
    wget http://chromedriver.storage.googleapis.com/$LATEST/chromedriver_linux64.zip && \
    unzip chromedriver_linux64.zip && ln -s $PWD/chromedriver /usr/local/bin/chromedriver

ENV PATH="/usr/local/bin/chromedriver:${PATH}"

# 3. Install selenium in Python
RUN pip install -U selenium

# 4. Finally, copy python code to image
COPY . /home/site/wwwroot

# 5. Install other packages in requirements.txt
RUN cd /home/site/wwwroot && \
    pip install -r requirements.txt

问题排查与解决步骤

1. 确保函数被正确识别

函数未出现在Functions列表,核心原因是运行时未检测到函数:

  • 确认本地项目根目录直接包含function_app.py、配置文件及requirements.txt,Dockerfile的COPY . /home/site/wwwroot会将所有根目录文件同步到容器指定路径,避免代码嵌套子目录。
  • 在Azure门户的函数应用→配置→应用设置中添加AzureWebJobsFeatureFlags: EnableWorkerIndexing,本地配置不会自动同步到云端。

2. 修正Timer Trigger配置冲突

代码中@app.schedule与function.json的schedule重复定义,建议保留其中一处(优先代码注解式配置),避免解析冲突。

3. 解决Chrome与驱动兼容性问题

Dockerfile自动下载最新驱动可能与稳定版Chrome版本不匹配,固定版本可避免此问题:

# 替换Chrome安装步骤为固定版本
ARG CHROME_VERSION="128.0.6613.84-1"
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
  && echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list \
  && apt-get update -qqy \
  && apt-get -qqy install google-chrome-stable=${CHROME_VERSION} \
  && rm /etc/apt/sources.list.d/google-chrome.list \
  && rm -rf /var/lib/apt/lists/* /var/cache/apt/*

# 对应下载相同版本的Chrome驱动
RUN wget http://chromedriver.storage.googleapis.com/128.0.6613.84/chromedriver_linux64.zip && \
    unzip chromedriver_linux64.zip && ln -s $PWD/chromedriver /usr/local/bin/chromedriver

4. 配置必要的云端环境变量

  • 在Azure门户配置有效的AzureWebJobsStorage连接字符串,Timer Trigger依赖存储账户管理触发状态,云端必须配置。
  • 确认FUNCTIONS_WORKER_RUNTIME设置为python,与本地配置一致。

5. 重新部署验证

清理本地镜像缓存,重新构建并推送镜像至Azure容器注册表,再部署到函数应用。部署完成后手动触发一次函数验证执行逻辑,再观察Timer Trigger是否按5分钟间隔触发。


内容的提问来源于stack exchange,提问作者Salma Khaled

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 07:32:09