如何将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)
- 先安装Container Apps的Azure CLI扩展:
az extension add --name containerapp --upgrade - 创建容器应用环境:
az containerapp env create --name <环境名> --resource-group <资源组名> --location <你的Azure区域> - 用修改后的compose文件部署:
az containerapp compose create --environment <环境名> --resource-group <资源组名> --file docker-compose.yaml - 部署完成后,Azure会分配公网域名,访问
https://<容器应用名>.<环境名>.<区域>.azurecontainerapps.io:8080即可打开Airflow UI
五、必踩坑提醒
- 绝对不要用sqlite做生产环境元数据库,必须用Azure托管的PostgreSQL/MySQL,否则容器重启后数据全丢
- 给ACR配置拉取权限:要让Azure容器服务能拉取ACR镜像,需给容器服务的服务主体分配
AcrPull角色 - 日志配置:开启Azure Monitor收集Airflow日志,方便排查任务失败问题
- 资源配额:根据任务量调整容器的CPU和内存,避免出现OOM或调度缓慢
内容的提问来源于stack exchange,提问作者Ellio
相关产品推荐
相关产品推荐

