如何使用Airflow结合Docker实现定时运行自定义镜像任务?
Airflow 搭配 Docker 运行自定义镜像实操步骤
1. 先搞定Airflow的Docker部署
如果还没部署Airflow,直接用官方的docker-compose配置:
- 拉取配置文件:
curl -LfO 'https://airflow.apache.org/docs/apache-airflow/stable/docker-compose.yaml' - 初始化Airflow:
docker-compose up airflow-init - 启动所有服务:
docker-compose up -d
启动后访问http://localhost:8080就能打开Airflow WebUI,默认账号密码都是airflow。
2. 确认你的自定义镜像可访问
你已经做了打印"hi"的镜像,假设镜像名叫my-hi-image:latest:
- 如果是本地构建的,确保和Airflow在同一个Docker环境下(不用额外操作,本地镜像直接能被Airflow容器拉取)
- 如果是私有仓库的镜像,后续要在Airflow里配置仓库登录信息
3. 配置Airflow的Docker连接
让Airflow能调用Docker服务,得先配连接:
- 打开Airflow WebUI,进入Admin > Connections
- 点**+新建连接,连接类型选Docker**
- 连接ID填
docker_default(后面DAG里要对应这个ID) - Host填
unix://var/run/docker.sock(本地环境下,这样能让Airflow容器访问宿主机的Docker服务) - 保存连接
4. 编写DAG文件
在Airflow的dags目录下新建hi_docker_dag.py,内容如下:
from airflow import DAG from airflow.providers.docker.operators.docker import DockerOperator from datetime import datetime, timedelta default_args = { 'owner': 'airflow', 'depends_on_past': False, 'start_date': datetime(2024, 1, 1), 'email_on_failure': False, 'email_on_retry': False, 'retries': 1, 'retry_delay': timedelta(minutes=5), } with DAG( 'run_hi_docker_image', default_args=default_args, description='运行打印"hi"的自定义Docker镜像', schedule_interval='0 */5 * * *', # 每隔5小时整点运行 catchup=False, tags=['docker', '示例'], ) as dag: run_docker_task = DockerOperator( task_id='run_hi_image', image='my-hi-image:latest', # 替换成你的镜像名和标签 api_version='auto', auto_remove=True, # 任务完成后自动删除容器 docker_conn_id='docker_default', # 对应前面配置的连接ID # 如果你的镜像Dockerfile里已经设置了CMD ["echo", "hi"],下面的command可以删掉 command='echo "hi"', network_mode='bridge', ) run_docker_task
5. 启动并验证DAG
- 把DAG文件放到
dags目录后,等待Airflow自动加载(或者在WebUI里点Refresh刷新DAG列表) - 找到
run_hi_docker_image这个DAG,打开开关启用它 - 可以手动触发测试:点DAG的Play按钮选Trigger DAG,然后去Graph视图看任务状态,日志里能看到打印的"hi"
注意事项
- 检查官方
docker-compose.yaml里,airflow-worker和airflow-scheduler服务是否挂载了/var/run/docker.sock:/var/run/docker.sock,没有的话要加上,不然Airflow容器访问不了Docker服务 - 如果用私有镜像仓库,要在Docker连接里配置仓库的用户名和密码,或者在Airflow容器里提前执行
docker login完成登录
内容的提问来源于stack exchange,提问作者ben par
相关产品推荐
相关产品推荐

