如何在GCP Composer2环境中执行apt-get安装Chrome二进制文件
在Cloud Composer 2中安装Chrome二进制文件的解决方法
Composer 2确实不支持直接在运行时执行apt-get这类系统命令,你可以通过以下几种方式解决Chrome安装问题:
1. 自定义Worker节点镜像(推荐生产环境)
基于Composer官方Worker镜像扩展,预先安装Chrome及驱动:
- 创建Dockerfile:
# 替换为你使用的Composer对应的官方镜像标签 FROM us-docker.pkg.dev/composer-227316/images/airflow-worker:composer-2.0.0-airflow-2.2.5 RUN apt-get update && \ apt-get install -y --no-install-recommends chromium-browser chromium-chromedriver && \ rm -rf /var/lib/apt/lists/* - 构建镜像并推送到Google Container Registry(GCR)或Artifact Registry
- 更新Composer环境,指定自定义Worker镜像路径
2. 使用Worker启动脚本(灵活快速)
通过Composer的启动脚本功能,在Worker节点启动时自动安装Chrome:
- 创建bash脚本(例如
install_chrome.sh):#!/bin/bash set -e apt-get update apt-get install -y --no-install-recommends chromium-browser chromium-chromedriver # 配置环境变量,让Airflow任务能找到Chrome echo 'export CHROME_BIN="/usr/bin/chromium-browser"' >> /etc/profile.d/chrome_env.sh echo 'export CHROMEDRIVER_PATH="/usr/bin/chromedriver"' >> /etc/profile.d/chrome_env.sh - 将脚本上传到Google Cloud Storage(GCS)
- 在Composer环境设置中配置
workerStartupScriptUri为该GCS文件路径(更新环境时设置)
3. 临时方案:在DAG中通过ShellOperator安装(不推荐生产)
如果只是临时测试,可以在DAG中用ShellOperator执行安装命令,但需注意Worker节点权限:
from airflow.operators.bash import BashOperator from airflow.models import DAG from datetime import datetime with DAG( dag_id='install_chrome_temp', start_date=datetime(2024, 1, 1), schedule_interval=None ) as dag: install_task = BashOperator( task_id='install_chrome', bash_command='sudo apt-get update && sudo apt-get install -y chromium-browser chromium-chromedriver' )
注意:该方法每次任务运行都会重复安装,效率低,且默认Worker可能没有sudo权限,需额外配置。
内容的提问来源于stack exchange,提问作者Jaehyun Baek
相关产品推荐
相关产品推荐

