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

如何将Docker Compose部署的Apache Airflow容器推送至Azure Container Registry

本地Docker Compose Airflow部署到Azure容器平台实操步骤

我之前做过类似部署,整理了完整操作流程,包括compose文件修改、镜像推送和Azure端部署:

一、先准备Azure容器注册表(ACR)

  • 用Azure CLI创建ACR实例:
    az acr create --resource-group <你的资源组名> --name <ACR名称> --sku Basic
    
  • 登录ACR,方便后续推送镜像:
    az acr login --name <ACR名称>
    
  • 记好ACR的镜像前缀:xxx.azurecr.io,后续所有Airflow服务镜像都要打这个标签

二、修改本地docker-compose.yaml文件

1. 替换镜像地址

把每个服务(webserver、scheduler、worker等)的image字段改成ACR地址,比如原来的apache/airflow:2.8.0改成<ACR名称>.azurecr.io/airflow-webserver:2.8.0。如果是自定义构建的镜像,先确保本地构建完成再打标签。

2. 调整核心配置

  • 执行器换成CeleryExecutor(本地Sequential不适合生产,Azure多容器支持分布式):
    environment:
      AIRFLOW__CORE__EXECUTOR: CeleryExecutor
    
  • 关闭示例加载:AIRFLOW__CORE__LOAD_EXAMPLES: 'false'
  • 替换元数据库连接:把原来的sqlite改成Azure托管的PostgreSQL/MySQL,连接字符串示例:
    AIRFLOW__DATABASE__SQL_ALCHEMY_CONN: postgresql+psycopg2://<用户名>:<密码>@<数据库地址>:5432/<数据库名>
    

3. 替换本地存储为Azure文件共享

本地的dags、logs、plugins挂载不能直接复用,要换成Azure文件共享,示例配置:

volumes:
  airflow-dags:
    driver: azure_file
    driver_opts:
      share_name: airflow-dags
      storage_account_name: <你的存储账户名>
  airflow-logs:
    driver: azure_file
    driver_opts:
      share_name: airflow-logs
      storage_account_name: <你的存储账户名>

然后在对应服务的volumes字段里引用这些volume,比如webserver:

volumes:
  - airflow-dags:/opt/airflow/dags
  - airflow-logs:/opt/airflow/logs

4. 简化网络配置

移除本地自定义网络(比如airflow-network),Azure容器服务会自动处理网络,无需额外配置。

三、推送镜像到ACR

  • 如果是自定义镜像,先构建:docker-compose build
  • 推送所有服务镜像:docker-compose push,或者单个推送:
    docker push <ACR名称>.azurecr.io/airflow-webserver:2.8.0
    

四、部署到Azure容器服务(推荐用Azure Container Apps)

  1. 先安装Container Apps的Azure CLI扩展:
    az extension add --name containerapp --upgrade
    
  2. 创建容器应用环境:
    az containerapp env create --name <环境名> --resource-group <资源组名> --location <你的Azure区域>
    
  3. 用修改后的compose文件部署:
    az containerapp compose create --environment <环境名> --resource-group <资源组名> --file docker-compose.yaml
    
  4. 部署完成后,Azure会分配公网域名,访问https://<容器应用名>.<环境名>.<区域>.azurecontainerapps.io:8080即可打开Airflow UI

五、必踩坑提醒

  • 绝对不要用sqlite做生产环境元数据库,必须用Azure托管的PostgreSQL/MySQL,否则容器重启后数据全丢
  • 给ACR配置拉取权限:要让Azure容器服务能拉取ACR镜像,需给容器服务的服务主体分配AcrPull角色
  • 日志配置:开启Azure Monitor收集Airflow日志,方便排查任务失败问题
  • 资源配额:根据任务量调整容器的CPU和内存,避免出现OOM或调度缓慢

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 04:57:10