首页 > 解决方案 > Airflow Docker Operator 移除容器或以附加模式启动容器

问题描述

我让 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 时,运行我的脚本来删除退出的容器才有效。

关于在这里做什么的任何建议?

标签: dockerairflowdockeroperator

解决方案


这已在 Docker Provider 1.0.1 中修复:

https://airflow.apache.org/docs/apache-airflow-providers-docker/stable/index.html#id9

以前当 auto_remove 设置为 true 并且容器出错时,它确实没有被删除。

只需升级到最新的 Docker Provider 即可解决问题。


推荐阅读