使用Airflow DockerOperator时报volumes参数无效错误如何解决?
问题原因
你使用的Airflow版本中,DockerOperator 已废弃volumes参数:从Airflow 2.x版本开始,Docker相关运算符的挂载配置统一使用mounts参数替代旧版volumes参数,因此传volumes会被识别为无效参数。同时旧版导入路径airflow.operators.docker_operator也已弃用,需更换为provider包的导入路径。
修复步骤
- 第一步:调整导入语句,引入新版
DockerOperator和DockerMount类 - 第二步:将原来的
volumes配置替换为mounts参数,按标准格式声明挂载规则 - 第三步:修复command中的语法错误,你原有command末尾的
%%为输入错误,应改为&&
修改后完整代码
from datetime import datetime, timedelta from airflow import DAG from airflow.providers.docker.operators.docker import DockerOperator, DockerMount from airflow.operators.dummy import DummyOperator default_args = { 'owner' : 'airflow', 'description' : 'Extract data from different sources into CH and train model with it', 'depend_on_past' : False, 'start_date' : datetime(2021, 7, 20), 'email_on_failure' : False, 'email_on_retry' : False, 'retries' : 1, 'retry_delay' : timedelta(minutes=5) } with DAG('docker_operator_demo', default_args=default_args, schedule_interval="00 23 * * *", catchup=False) as dag: start_dag = DummyOperator( task_id='start_dag' ) end_dag = DummyOperator( task_id='end_dag' ) t1 = DockerOperator( task_id='etl_in_ch', image='python:3.9.2-slim', container_name='etl_in_ch', api_version='auto', auto_remove=True, command="apt-get update && apt-get install -y cron && apt-get install -y libxml2 libxslt-dev wget bzip2 gcc \ && pip install --no-cache-dir --upgrade pip \ && pip install --no-cache-dir poetry==1.1.5 \ && poetry config virtualenvs.create false\ && poetry install --no-interaction --no-ansi \ && chmod +x /src/__main__.py \ && python __main__.py", docker_url="unix://var/run/docker.sock", network_mode="bridge", environment={"PYTHONDONTWRITEBYTECODE": 1, "PYTHONUNBUFFERED": 1}, working_dir="/usr/src/copy_data", mounts=[ DockerMount(source="./CH_ETL/src", target="/usr/src/copy_data", type="bind"), DockerMount(source="./pyproject.toml", target="/pyproject.toml", type="bind"), ] ) start_dag >> t1 t1 >> end_dag
额外注意事项
- 挂载配置中使用的相对路径是相对于Airflow Scheduler服务的工作目录,而非DAG文件所在目录,建议替换为绝对路径避免出现挂载找不到文件的问题。
- 如果你的环境没有预装docker provider包,可执行
pip install apache-airflow-providers-docker安装。
内容的提问来源于stack exchange,提问作者MStikh
相关产品推荐
相关产品推荐

