You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows环境Docker容器中Airflow运行Selenium WebDriver失败求助

解决Docker容器中Airflow运行Selenium chromedriver退出(状态码127)问题

核心原因分析

状态码127本质是找不到可执行文件或缺少依赖库,Docker环境下常见触发场景:

  • 容器仅安装chromedriver,未部署Chrome浏览器本体
  • Chrome与chromedriver版本不兼容
  • 缺少Chrome运行必需的系统依赖库
  • 执行权限不足

分步解决方案

1. 修正Dockerfile:部署完整Chrome环境

不要仅依赖webdriver-manager自动下载,容器基础环境需预装Chrome、匹配版本的chromedriver及系统依赖。基于Airflow官方镜像的示例Dockerfile:

FROM apache/airflow:2.8.0-python3.10

# 切换root用户安装系统依赖
USER root
RUN apt-get update && apt-get install -y \
    wget gnupg unzip libnss3 libgconf-2-4 \
    libxss1 libappindicator1 libindicator7 \
    fonts-liberation libasound2 libatk-bridge2.0-0 libgtk-3-0 \
    && rm -rf /var/lib/apt/lists/*

# 安装Chrome浏览器
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
    && echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list \
    && apt-get update && apt-get install -y google-chrome-stable

# 下载匹配版本的chromedriver并配置可执行权限
RUN CHROME_VERSION=$(google-chrome --version | grep -oP '\d+\.\d+\.\d+') \
    && wget -O /tmp/chromedriver.zip https://storage.googleapis.com/chrome-for-testing-public/$CHROME_VERSION/linux64/chromedriver-linux64.zip \
    && unzip /tmp/chromedriver.zip -d /usr/local/bin/ \
    && chmod +x /usr/local/bin/chromedriver-linux64/chromedriver \
    && ln -s /usr/local/bin/chromedriver-linux64/chromedriver /usr/local/bin/chromedriver

# 切回airflow用户
USER airflow

# 安装Python依赖
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

2. 调整Airflow DAG代码:启用无头模式

容器无图形界面,必须启用Chrome无头模式,可显式指定chromedriver路径确保调用正确:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

def selenium_exec_task():
    chrome_options = Options()
    # 无头模式核心参数
    chrome_options.add_argument("--headless=new")
    chrome_options.add_argument("--no-sandbox")
    chrome_options.add_argument("--disable-dev-shm-usage")
    chrome_options.add_argument("--disable-gpu")
    
    # 显式指定chromedriver路径(Dockerfile已做软链接,也可省略)
    driver = webdriver.Chrome(
        executable_path="/usr/local/bin/chromedriver",
        options=chrome_options
    )
    
    # 业务逻辑示例
    driver.get("https://example.com")
    print(driver.title)
    
    driver.quit()

3. 精简requirements.txt

仅保留必需依赖即可:

selenium==4.15.2
webdriver-manager==4.0.1

4. 权限排查(可选)

若仍有权限问题,可临时在docker-compose.yaml中添加user: root测试(生产环境不建议),但优先确保Dockerfile中已给chromedriver添加chmod +x权限。

验证步骤

  1. 重新构建镜像:docker-compose build
  2. 启动容器:docker-compose up -d
  3. 查看Airflow任务日志确认运行状态
  4. 若仍报错,进入容器执行chromedriver --version和google-chrome --version确认版本匹配,直接执行chromedriver查看具体依赖缺失提示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 01:40:22