使用Airflow DockerOperator时retrieve_output参数遇无效参数错误求助
Airflow DockerOperator 无效参数报错解决
问题详情
运行DockerOperator时触发如下参数错误:
Invalid arguments were passed to DockerOperator (task_id: t2). Invalid arguments were:
**kwargs: {'retrieve_output': True, 'retrieve_output_path': '/tmp/script.out'}
对应的实现代码:
from airflow.decorators import task, dag from airflow.providers.docker.operators.docker import DockerOperator from datetime import datetime @dag(start_date=datetime(2023, 1, 1), schedule="@daily", catchup=False) def docker_dag(): @task() def t1(): pass t2 = DockerOperator( task_id='t2', container_name="task_t2", image='stock_image:v1.0.2', command='python3 stock_data.py', docker_url="tcp://docker-proxy:2375", # MacOS环境下规避权限问题的配置 network_mode='bridge', xcom_all=True, retrieve_output=True, retrieve_output_path="/tmp/script.out", auto_remove=True, mount_tmp_dir=False ) t1() >> t2 dag = docker_dag()
疑问:官方文档显示retrieve_output和retrieve_output_path是DockerOperator的合法参数,为何会触发无效参数错误?
原因分析
retrieve_output和retrieve_output_path是apache-airflow-providers-docker 3.7.0版本才新增的参数。如果你的环境中安装的docker provider版本低于3.7.0,Airflow会识别不到这两个参数,从而抛出无效参数的错误。你查看的官方文档对应最新稳定版,但本地环境的依赖版本落后,导致参数不兼容。
解决方案
方案1:升级docker provider版本
- 先检查当前安装的版本:
pip show apache-airflow-providers-docker - 升级到至少3.7.0版本:
pip install --upgrade apache-airflow-providers-docker>=3.7.0
方案2:使用现有参数替代
如果因Airflow核心版本限制无法升级provider,可以用你已经配置的xcom_all=True来替代retrieve_output的功能——它会将容器的stdout和stderr内容推送到XCom,满足获取输出的需求。
内容的提问来源于stack exchange,提问作者Austin Wolff
相关产品推荐
相关产品推荐

