我让 Airflow 在容器中运行。
我使用 Docker Operator 创建了许多运行脚本的容器。
容器的名称是使用一些参数动态创建的,如果我列出容器以通过终端查看发生了什么,这对我来说很有意义。
例如,容器名称称为 my_script_daily_A
如果脚本成功运行,容器将自动删除。
如果任务失败,我会重试。如果脚本失败并且气流重试运行,则会出现问题:
如果脚本失败,容器仍会以退出状态存在,不会被删除。这使得它的名称已经分配,因此当 Airflow 再次运行任务时,它会引发错误“具有此名称的容器已经存在”。
为了解决这个问题,我创建了一个每分钟在主机上运行的脚本:
for i in $(docker ps -aq --filter status=exited); do
echo 'Removing '; docker rm $i done
我对此不太满意,我宁愿只有在失败时才触发这个脚本,如果我能检测到失败是否是由于名称冲突引起的就更好了。
我知道您可以使用“on_failure_callback”属性设置回调操作。
但是,只有在我直接在主机上而不是在容器上运行 Airflow 时,运行我的脚本来删除退出的容器才有效。
关于在这里做什么的任何建议?