Airflow DockerOperator使用mounts参数报意外关键字参数错误怎么解决
问题原因
这个报错和SSD挂载的业务逻辑无关,是依赖包版本不兼容导致的:
错误栈里的TypeError: __init__() got an unexpected keyword argument 'mounts'说明你Airflow运行环境安装的Docker Python SDK版本过低,旧版本的SDK中HostConfig构造函数不支持mounts参数,只有2.0及以上版本的Docker SDK才支持该参数。
解决方案
你可以选择以下任意一种方案解决:
方案1:升级Docker Python SDK
直接给Airflow对应的Python环境升级Docker SDK即可,执行命令:
pip install -U docker
注意你日志里显示Airflow运行在Python3.6环境下,需要确保升级的是该Python3.6环境下的docker包。升级完成后重新运行DAG即可,原代码不需要修改。
方案2:替换为旧版兼容的volumes参数
如果你无法升级依赖包,可以把mounts参数替换为旧版SDK支持的volumes参数,不需要导入docker.types.Mount,修改后的代码片段如下:
# 删掉原来的Mount对象定义,直接配置volumes参数 extract = DockerOperator( api_version="auto", task_id='docker_extract', image='registry.gitlab.com/url/of/gitlab:a24a3f05', container_name='extract-test', # 替换mounts为volumes volumes=['/media/filip/external-ssd:/external-ssd'], auto_remove = True, force_pull = False, mount_tmp_dir=False, command='python3 rgb_image_extraction.py --bagfile /external-ssd/2021-09-01-13-17-10.bag --output_dir /external-ssd/airflow --camera_topic /kirby1/vm0/stereo/left/color/image_rect --every_n_img 20 --timestamp_as_name', docker_conn_id='gitlab_registry', dag=dag )
额外注意事项
解决版本兼容问题后,还需要确认Airflow运行的用户对/media/filip/external-ssd路径有读写权限,否则挂载后也会出现文件读写报错。
内容的提问来源于stack exchange,提问作者filip juric
相关产品推荐
相关产品推荐

