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权限。
验证步骤
- 重新构建镜像:
docker-compose build - 启动容器:
docker-compose up -d - 查看Airflow任务日志确认运行状态
- 若仍报错,进入容器执行
chromedriver --version和google-chrome --version确认版本匹配,直接执行chromedriver查看具体依赖缺失提示
内容的提问来源于stack exchange,提问作者panos
相关产品推荐
相关产品推荐

