Airflow Docker 操作员删除容器或以附加模式启动容器

Airflow Docker Operator remove container or start container in attached mode

我在容器中安装了 Airflow 运行ning。

我使用Docker操作符创建了多个容器,运行一个脚本。

容器的名称是使用一些参数动态创建的,如果我列出容器以通过终端查看发生了什么,这对我来说很有意义。

比如容器名称叫做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 提供程序,问题应该得到解决。