Docker部署MWAA本地Airflow容器持续重启报KeyError故障排查
问题场景
在Windows操作系统中基于Docker+Ubuntu搭建本地Airflow环境,部署使用AWS官方提供的aws-mwaa-local-runner工具,该工具会自动创建2个容器,分别用于运行数据库服务与Airflow服务。
故障表现
Airflow容器抛出两类异常后进入持续重启循环:
- 初始化报错提示:
ERROR: You need to initialize the database. Please run airflow db init. Make sure the command is run using Airflow version 2.3.2.
- 数据库初始化/升级流程中抛出Alembic版本迁移栈追踪错误,最终触发
KeyError: '75d5ed6c2b43'异常,完整栈追踪信息如下:
Traceback (most recent call last): File "/usr/local/bin/airflow", line 8, in sys.exit(main()) File "/usr/local/airflow/.local/lib/python3.7/site-packages/airflow/__main__.py", line 38, in main args.func(args) File "/usr/local/airflow/.local/lib/python3.7/site-packages/airflow/cli/cli_parser.py", line 51, in command return func(*args, **kwargs) File "/usr/local/airflow/.local/lib/python3.7/site-packages/airflow/cli/commands/db_command.py", line 35, in initdb db.initdb() File "/usr/local/airflow/.local/lib/python3.7/site-packages/airflow/utils/session.py", line 71, in wrapper return func(*args, session=session, **kwargs) File "/usr/local/airflow/.local/lib/python3.7/site-packages/airflow/utils/db.py", line 648, in initdb upgradedb(session=session) File "/usr/local/airflow/.local/lib/python3.7/site-packages/airflow/utils/session.py", line 68, in wrapper return func(*args, **kwargs) File "/usr/local/airflow/.local/lib/python3.7/site-packages/airflow/utils/db.py", line 1449, in upgradedb command.upgrade(config, revision=to_revision or 'heads') File "/usr/local/lib/python3.7/site-packages/alembic/command.py", line 294, in upgrade script.run_env() File "/usr/local/lib/python3.7/site-packages/alembic/script/base.py", line 490, in run_env util.load_python_file(self.dir, "env.py") File "/usr/local/lib/python3.7/site-packages/alembic/util/pyfiles.py", line 97, in load_python_file module = load_module_py(module_id, path) File "/usr/local/lib/python3.7/site-packages/alembic/util/compat.py", line 182, in load_module_py spec.loader.exec_module(module) File "", line 728, in exec_module File "", line 219, in _call_with_frames_removed File "/usr/local/airflow/.local/lib/python3.7/site-packages/airflow/migrations/env.py", line 107, in run_migrations_online() File "/usr/local/airflow/.local/lib/python3.7/site-packages/airflow/migrations/env.py", line 101, in run_migrations_online context.run_migrations() File "", line 8, in run_migrations File "/usr/local/lib/python3.7/site-packages/alembic/runtime/environment.py", line 813, in run_migrations self.get_context().run_migrations(**kw) File "/usr/local/lib/python3.7/site-packages/alembic/runtime/migration.py", line 548, in run_migrations for step in self._migrations_fn(heads, self): File "/usr/local/lib/python3.7/site-packages/alembic/command.py", line 283, in upgrade return script._upgrade_revs(revision, rev) File "/usr/local/lib/python3.7/site-packages/alembic/script/base.py", line 365, in _upgrade_revs revs = list(revs) File "/usr/local/lib/python3.7/site-packages/alembic/script/revision.py", line 1040, in _iterate_revisions total_space.remove(rev.revision) KeyError: '75d5ed6c2b43'
已尝试排查操作
- 执行
docker exec -it aws-mwaa-local-runner-202_local-runner_1 /entrypoint.sh airflow db upgrade命令升级数据库,仍抛出相同KeyError: '75d5ed6c2b43'错误 - 先后执行
docker exec -it aws-mwaa-local-runner-202_local-runner_1 /entrypoint.sh airflow initdb、docker exec -it aws-mwaa-local-runner-202_local-runner_1 /entrypoint.sh airflow reset命令重置、初始化Airflow数据库,依旧复现该KeyError错误,容器持续重启问题未解决
解决方案
该故障根因为数据库持久化卷中残留了与当前Airflow 2.3.2版本不匹配的Alembic迁移版本记录,容器内执行的数据库重置、初始化命令不会清理挂载在宿主机上的持久化卷数据,因此迁移校验持续失败。按以下步骤操作即可修复:
- 进入
aws-mwaa-local-runner项目根目录,停止所有运行中的相关容器:
docker-compose down
- 清理残留的旧持久化数据卷:
- 若本地无其他需要保留的Docker卷数据,直接执行全量清理:
docker volume prune -f- 若需要保留其他项目的Docker卷,先过滤出MWAA相关的数据库卷,再单独删除:
注意:该操作会清空本地所有旧的Airflow元数据、历史任务记录docker volume ls | grep mwaa docker volume rm 上一步查询到的目标卷名 - 确认残留容器和旧卷清理完成后,重新构建镜像并启动服务:
./mwaa-local-env build-image ./mwaa-local-env start
- 启动后等待1-2分钟,待初始化流程自动跑完即可正常访问本地Airflow控制台,不会再出现重启循环和KeyError报错。
如果执行完上述步骤仍复现问题,检查本地拉取的aws-mwaa-local-runner仓库分支/tag是否与目标MWAA 2.3.2版本完全对应,不要使用main分支代码构建镜像,避免镜像内置的迁移脚本与版本不匹配。
内容的提问来源于stack exchange,提问作者Alan Mil
相关产品推荐
相关产品推荐

