Airflow登录触发AttributeError:'NoneType'对象无'id'属性
AttributeError: 'NoneType' object has no attribute 'id'问题 问题背景
将Airflow从1.10版本升级至2.0.2并在Docker部署后,服务器端运行正常,但本地Ubuntu WSL环境下登录时触发以下错误:
Something bad has happened.
Please consider letting us know by creating a bug report using GitHub.Python version: 3.7.16
Airflow version: 2.0.2
Node: 77f00a6dff27Traceback (most recent call last):
File "/home/airflow/.local/lib/python3.7/site-packages/flask/app.py", line 2447, in wsgi_app
response = self.full_dispatch_request()
File "/home/airflow/.local/lib/python3.7/site-packages/flask/app.py", line 1952, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/airflow/.local/lib/python3.7/site-packages/flask/app.py", line 1821, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/airflow/.local/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise
raise value
File "/home/airflow/.local/lib/python3.7/site-packages/flask/app.py", line 1950, in full_dispatch_request
rv = self.dispatch_request()
File "/home/airflow/.local/lib/python3.7/site-packages/flask/app.py", line 1936, in dispatch_request
return self.view_functionsrule.endpoint
File "/home/airflow/.local/lib/python3.7/site-packages/flask_appbuilder/security/views.py", line 517, in login
form.username.data, form.password.data
File "/home/airflow/.local/lib/python3.7/site-packages/flask_appbuilder/security/manager.py", line 874, in auth_user_db
self.noop_user_update(first_user)
File "/home/airflow/.local/lib/python3.7/site-packages/flask_appbuilder/security/sqla/manager.py", line 244, in noop_user_update
.where(self.user_model.id == user.id)
AttributeError: 'NoneType' object has no attribute 'id'
错误原因
该错误本质是Flask-AppBuilder验证用户身份时,从数据库查询到的用户对象为None,导致后续尝试访问user.id属性失败。常见诱因包括:本地元数据库未完成升级迁移、用户凭证不匹配、本地配置/缓存异常。
解决步骤
验证并修复元数据库状态
- 进入Airflow Docker容器:
docker exec -it <airflow-webserver-container-id> bash - 检查数据库连接是否正常:
airflow db check - 执行升级迁移(从1.10升级到2.x必须操作):
airflow db upgrade
- 进入Airflow Docker容器:
确认登录凭证有效性
- 确保使用的用户名/密码与服务器端完全一致
- 若本地数据库无对应用户,重新创建管理员用户:
按提示设置与服务器相同的密码airflow users create --username admin --firstname Admin --lastname User --role Admin --email admin@example.com
清理本地缓存与配置
- 删除WSL本地的Airflow配置目录(默认路径):
rm -rf ~/.airflow/ - 同步服务器端的Airflow配置文件到本地
- 用浏览器无痕模式登录,避免旧会话缓存干扰
- 删除WSL本地的Airflow配置目录(默认路径):
排查WSL网络通信
- 确认WSL能正常访问Airflow容器的Web端口(默认8080),可通过
curl http://<container-ip>:8080测试 - 检查WSL防火墙规则,确保未阻断容器端口访问
- 确认WSL能正常访问Airflow容器的Web端口(默认8080),可通过
内容的提问来源于stack exchange,提问作者flogurt11

