【发布时间】:2023-02-19 15:25:51
【问题描述】:
我有一个使用标准 Docker 参数运行的 Airflow 工作实例。
我试图在同一网络上联系一个单独的 postgresql 服务器(如,不是气流使用的那个服务器),而不是使用 docker。
postgresql 服务器运行于:
- 主机:192.168.4.4
- 端口:30991
- 用户:读取用户
我在 airflow -> admin -> connections 下添加了一个连接,如下所示:
我努力了:
-
容器内的
airflow connections get命令确实返回连接配置。 - 来自 airflow 容器(在 bash 中)的
pg_isready命令以及各种 psql 命令不起作用。在容器外,在主机上,它们可以工作。 - 我尝试在 airflow 容器中使用 ping,但由于 docker 安装很少,它似乎没有安装 ping。还有其他方法可以测试吗?
我最终想做的是:
我的任务是创建一个 dag 来创建整个 postgres 服务器的备份。我想通过 BashOperator 使用 pg_dump。如果气流无法连接到 postgresql 服务器,我将无法执行此操作。
【问题讨论】:
-
如果您通过 bashoperator 在 shell 上使用 pg_dump,为什么气流接口需要通过连接连接到 postgres?我不是气流专家,但感觉不对。我同意您应该能够通过气流连接进行连接,而您无法这样做表明您在 bash shell 中也会遇到问题。另外,无关紧要,那是您的 postgres 数据库的正确端口吗?我问只是因为我不相信它是默认的。
-
这些都是很好的问题。 pg_dump 命令需要传递主机、端口等参数,但没有用。那是当我走下气流路径时根本看不到服务器。端口是正确的,我可以使用各种其他方法(pgadmin、不在容器中时的 bash 等)连接到它,这绝对不是默认的。我没有设置它所以我不知道他们为什么选择这个端口。
-
听起来像是网络问题。您是否能够通过 telnet 或 netcat 连接到气流系统外壳上的该端口?也许这更多是 docker 或 k8s 问题?
-
这也是我目前的想法,在睡过之后。我将测试并报告回来/编辑。我认为这可能是为此容器配置 docker 网络的方式。我将调查差异。谢谢。
标签: postgresql docker airflow