You need to enable JavaScript to run this app. Airflow镜像构建成功但docker-compose启动报错找不到urllib3.packages.six模块
优惠活动
大模型
产品
解决方案
定价
更多

Airflow镜像构建成功但docker-compose启动报错找不到urllib3.packages.six模块

问题根因

报错本质是第三方依赖版本冲突,和Airflow本身的配置错误没有关系:

  • 你在Dockerfile最后一步无版本约束单独安装urllib3时,pip默认拉取了已经不再兼容Python3.6的高版本urllib3。这类高版本urllib3已经移除了内置打包的six兼容模块,而当前环境中适配Python3.6的旧版requests包依然会从urllib3.packages.six路径导入依赖,最终触发ModuleNotFoundError报错。
  • 日志中提示的Airflow日志处理器file_task_handler导入失败,只是上述导入错误触发的连锁反应,不是问题的根源。
排查与修复步骤

1. 先定位容器内的实际版本错配

在启动失败的容器内执行以下命令,确认依赖版本状态:

pip3 list | grep -E "urllib3|requests|six"

正常会匹配到两类错配特征:

  • 安装的urllib3版本大于1.25.11(该版本之后urllib3停止内置six模块,且后续版本逐步放弃对Python3.6的支持)
  • 安装的requests版本为2.26.0及以下,依然依赖urllib3内置的six导入路径

2. 调整Dockerfile的依赖安装逻辑

按照以下规则修改安装命令,从根源解决版本冲突:

  • 删掉原Dockerfile中最后一行无版本约束的独立urllib3安装命令。Airflow本身的依赖解析逻辑会自动安装适配当前运行环境的urllib3版本,手动在主依赖安装完成后覆盖安装核心网络库,非常容易打乱原有版本匹配关系。
  • 如果确实需要自定义urllib3、requests版本,必须锁定适配Python3.6的兼容版本:
    • 安装urllib3==1.26.18,这是最后一个支持Python3.6的urllib3版本,内置完整的six兼容路径,不会触发导入错误
    • 配套安装requests==2.27.1,和上述urllib3版本的导入逻辑完全匹配
  • 调整安装顺序:把urllib3、requests的安装步骤放到Airflow主依赖安装之前,避免后续安装的其他依赖把版本覆盖成不兼容的错配版本。安装完成后加一步依赖完整性校验:
    pip3 check
    
    提前发现版本错配问题,不要等到容器启动时才暴露导入报错。

3. 清理缓存后重新构建镜像

由于之前的构建层已经缓存了错配的依赖版本,重新构建时需要跳过本地缓存,避免旧的错配依赖残留在新镜像中:

docker-compose build --no-cache
常见坑点提醒
  • 当前环境使用的Python3.6已经正式停止维护,后续所有通过pip安装的第三方包,都必须手动锁定最后一个支持Python3.6的版本,不能使用不带版本号的安装命令,pip默认拉取的最新版本几乎都已经放弃对Python3.6的兼容。
  • urllib3、requests这类核心网络库是Airflow、Celery、各类数据库驱动、API客户端的公共依赖,不要在主依赖安装完成后单独覆盖安装这类包,否则会触发跨组件的连锁导入错误,排查成本极高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 14:24:02