Airflow中指定Mongo连接调用失败,报错名称或服务未知求助
检查
mongo_test连接的主机配置
进入Airflow UI的Admin > Connections,找到mongo_test连接,确认Host字段填的是MongoDB实例的正确IP地址或可解析的主机名。别填错内部服务名(如果是容器环境,得确保Airflow所在容器能解析这个服务名),本地MongoDB的话,直接填localhost或127.0.0.1试试。另外可以在Airflow服务器/容器里执行ping <主机名/IP>,看能不能解析并连通,比如ping mongo-test-host,ping不通的话就是DNS解析或网络有问题。验证连接的其他参数是否正确
确认Port字段是MongoDB默认的27017(改了端口的话填对应值)。如果MongoDB开了认证,检查Login、Password是否正确,Schema字段有没有填目标数据库名。可以对比mongo_default的配置,把mongo_default里能正常连接的主机/端口配置复制到mongo_test里测试。测试Airflow连接的有效性
在Airflow UI的连接详情页,点Test按钮(有的话)直接测连接能不能成功,看返回的错误和代码里的是否一致。如果UI测试也报错,说明连接配置本身有问题;如果UI测试成功,那可能是代码里的mongo_conn_id拼写错了,或者Airflow元数据库的连接信息没同步,试试重启Airflow scheduler和webserver。检查DNS解析问题
如果用的是主机名而非IP,在Airflow运行的环境(容器、服务器)里执行nslookup <主机名>或dig <主机名>,看能不能解析到正确的IP。解析失败的话,要么换用IP地址,要么配置正确的DNS服务器,确保Airflow环境能解析这个主机名。确认网络连通性
用telnet <主机名/IP> <端口>或nc -zv <主机名/IP> <端口>测试Airflow环境到MongoDB实例的端口是否开放,比如nc -zv 192.168.1.100 27017。端口不通的话,检查MongoDB实例的防火墙规则、安全组配置,或者是不是在同一个网络(比如容器环境是否在同一个Docker网络)。检查MongoHook的版本和兼容性
确认Airflow的apache-airflow-providers-mongo插件版本和MongoDB服务器版本兼容,过旧的插件可能不支持新的MongoDB认证方式或主机解析方式。可以尝试更新插件:pip install --upgrade apache-airflow-providers-mongo
内容的提问来源于stack exchange,提问作者skye

