Airflow Docker部署添加外部网络后Scheduler启动报错问题咨询
问题产生原因
- 核心原因是Docker网络服务名解析冲突:当你将compose全局默认网络替换为外部网络
ti-network后,所有服务的域名解析都在该外部网络范围内生效。如果该外部网络中已经存在其他名称为postgres的容器/服务,Airflow组件配置的数据库地址postgres会被解析到外部网络中已有的旧postgres实例,而非当前compose启动的postgres实例。旧实例的airflow用户密码与你当前配置的密码不匹配,因此触发密码校验失败报错。 - 当你移除外部网络配置后,compose会为当前项目创建独立的隔离默认网络,网络内仅存在当前compose启动的服务,
postgres解析指向正确的本地实例,因此服务正常运行。
解决方案
按照以下步骤操作即可在保留外部网络的前提下解决问题:
- 排查冲突服务
执行命令查看外部网络内的运行容器:
docker network inspect ti-network
检查返回结果的Containers字段,确认是否存在名称或别名包含postgres的其他容器。
解决解析冲突(二选一即可)
- 方案A:修改当前compose内postgres服务名称
将services.postgres重命名为airflow-postgres,同时同步修改x-airflow-common.environment下的两处数据库配置:AIRFLOW__CORE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:airflow@airflow-postgres/airflow AIRFLOW__CELERY__RESULT_BACKEND: db+postgresql://airflow:airflow@airflow-postgres/airflow - 方案B:为postgres服务添加专属网络别名
在原有postgres服务配置中新增网络别名配置,无需修改服务名:
同样同步修改上述两处数据库配置的主机名为services: postgres: image: postgres:13 networks: default: aliases: - airflow-postgres # 其余原有配置保持不变airflow-postgres。
- 方案A:修改当前compose内postgres服务名称
清理旧资源并重启
先执行命令清理旧的postgres数据卷,避免旧初始化数据干扰:
docker-compose down -v
确认外部网络ti-network已存在,不存在则执行docker network create ti-network创建,之后重新执行启动命令即可:
docker-compose build docker-compose up airflow-init docker-compose up
内容的提问来源于stack exchange,提问作者BuffaloDev
相关产品推荐
相关产品推荐

