求助:如何用Docker Compose搭建Python 3.11版本的Airflow容器?
Airflow容器Python版本升级失败问题解决
我在WSL Ubuntu环境中使用2.6.3版本的docker-compose.yml部署了Airflow,计划用它调度运行基于Python 3.10开发、依赖最新版numpy的程序。但Airflow容器默认使用Python 3.7.17,无法适配我的程序。已知Airflow 2.6.3支持Python 3.11,于是尝试通过Dockerfile构建容器安装Python 3.10,但构建完成后容器仍保留Python 3.7.17,问题未解决。希望通过解决该问题学习相关知识,以下是我的Dockerfile:
FROM apache/airflow:2.6.3 USER root RUN python -m pip install --upgrade pip RUN apt-get update \ && apt-get install -y --no-install-recommends \ build-essential \ libssl-dev \ zlib1g-dev \ libbz2-dev \ libreadline-dev \ libsqlite3-dev \ wget \ curl \ llvm \ libncurses5-dev \ libncursesw5-dev \ xz-utils \ tk-dev \ libffi-dev \ liblzma-dev \ python3-openssl \ git \ && curl -L https://www.python.org/ftp/python/3.10.0/Python-3.10.0.tgz -o python.tgz \ && tar xvf python.tgz \ && cd Python-3.10.0 \ && ./configure --enable-optimizations \ && make altinstall \ && apt-get clean && rm -rf /var/lib/apt/lists/* RUN sudo update-alternatives --install /usr/bin/python python /usr/local/bin/python3.10 1 RUN python --version USER airflow RUN pip --version COPY requirements.txt ./
问题原因
- 仅替换了
python命令指向,但Airflow内部依赖python3命令,原容器中python3仍指向3.7版本 - Airflow核心依赖基于Python 3.7编译安装,单纯替换系统Python版本无法自动适配这些依赖
update-alternatives配置未正确覆盖原有Python优先级,且构建阶段的python --version仅在镜像构建时执行,容器运行时环境可能未生效
解决方案
推荐方案:使用官方Python 3.10镜像
Airflow官方提供了对应不同Python版本的预构建镜像,格式为apache/airflow:<airflow-version>-python<python-version>。直接使用该镜像无需手动编译Python,且能保证Airflow依赖与Python版本兼容。
修改后的Dockerfile:
FROM apache/airflow:2.6.3-python3.10 USER airflow COPY requirements.txt ./ # 安装程序依赖 RUN pip install --no-cache-dir -r requirements.txt
手动编译替换方案(不推荐)
若坚持手动编译,需完全替换Airflow使用的Python路径并重新安装依赖:
- 替换
python3和pip的系统默认指向:
# 高优先级替换python3命令指向3.10 RUN update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.10 100 # 替换pip命令指向3.10的pip RUN update-alternatives --install /usr/bin/pip pip /usr/local/bin/pip3.10 100
- 重新安装Airflow核心依赖,适配Python 3.10:
RUN pip install apache-airflow==2.6.3 --no-cache-dir
- 注意:该方法可能引发Airflow组件兼容性问题,官方不推荐此操作
验证步骤
构建镜像后,进入容器执行以下命令确认版本:
python --version python3 --version pip --version
内容的提问来源于stack exchange,提问作者Gs.
相关产品推荐
相关产品推荐

