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

如何在Docker Compose部署的Airflow中使用主机网络?

Airflow Docker Compose 主机网络配置解决邮件发送问题

问题根源

给服务添加network_mode: "host"后无限输出".",是因为宿主机端口被旧版Airflow或其他进程占用,Airflow启动脚本检测到端口冲突后循环重试导致。

分步配置方案

1. 清理端口冲突

先停掉本地旧版Airflow服务,释放默认端口:

systemctl stop airflow-webserver airflow-scheduler airflow-worker

检查端口占用,确保8080、5555、8793等Airflow默认端口未被占用:

netstat -tulpn | grep -E "(8080|5555|8793)"

如果有其他进程占用,优先停止对应进程(为了无缝迁移,不推荐修改Airflow端口配置)。

2. 修改docker-compose.yml配置

方式一:全局使用主机网络

在yml文件最顶层添加全局网络配置,替代默认的bridge网络:

networks:
  default:
    external: true
    name: host

同时删除所有服务下的ports映射(主机网络下端口映射无效,保留会报错)。

方式二:仅给需要发邮件的服务配置主机网络

如果不需要所有服务都用host网络,仅给执行任务发邮件的核心服务(worker和scheduler)单独配置:

services:
  airflow-worker:
    network_mode: host
    # 删除该服务下的ports配置
    # 其他原有配置保持不变
  airflow-scheduler:
    network_mode: host
    # 删除该服务下的ports配置
    # 其他原有配置保持不变
  # webserver等其他服务可保留默认bridge网络,不影响邮件发送

3. 验证配置

重启服务:

docker compose down
docker compose up -d

进入worker容器测试SMTP连接:

docker exec -it $(docker ps -q -f name=airflow-worker) python3 -c "
import smtplib
try:
    smtp = smtplib.SMTP('localhost', 25)
    smtp.noop()
    print('SMTP连接成功')
    smtp.quit()
except Exception as e:
    print(f'连接失败: {str(e)}')
"

关键注意事项

  • CentOS 7下使用主机网络无需额外修改iptables规则,只要宿主机的SMTP服务(如postfix)监听127.0.0.1或允许本地连接即可。
  • 主机网络模式下,容器内的localhost直接指向宿主机回环地址,完全兼容原有代码中的邮件配置,无需修改任何.py文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 19:58:31