docker - 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 时,运行我的脚本来删除退出的容器才有效。
关于在这里做什么的任何建议?
解决方案
这已在 Docker Provider 1.0.1 中修复:
https://airflow.apache.org/docs/apache-airflow-providers-docker/stable/index.html#id9
以前当 auto_remove 设置为 true 并且容器出错时,它确实没有被删除。
只需升级到最新的 Docker Provider 即可解决问题。
推荐阅读
- java - 在Java中使用子字符串删除部分字符串
- python - 来自邻接矩阵的 Gurobi、python 和 tsp
- elasticsearch - Elasticsearch没有multi_match的结果
- react-native - 将照片从 React Native 应用程序上传到 Strapi api
- matlab - Matlab:用名称保存文件
- postgresql - 在 postgresql 中修改 UNIQUE
- r - 加密R中的输入文本
- python - 给定两个长度相同的 NumPy 数组 x 和 y,我如何选择所有对 (x,y) 以使 x 介于 x_min 和 x_max 之间?
- kubernetes - Kubernetes Helm 卡在正在进行的更新中
- r - 堆积面积累积和图