【问题标题】:Connection Airflow Docker to PostgreSql Docker将 Airflow Docker 连接到 PostgreSql Docker
【发布时间】:2021-10-17 14:55:13
【问题描述】:

我在 Docker 中使用 Airflow 和 PostgreSQL。

所以我在端口 5433 上设置了一个 PostgreSQL 数据库。容器 (384eaa7b6efb)。这是我想要在 Airflow 中使用我的 dag 获取的数据的地方。

码头工人ps

CONTAINER ID   IMAGE                  COMMAND                  CREATED        STATUS
       PORTS                              NAMES
384eaa7b6efb   postgres               "docker-entrypoint.s…"   4 hours ago    Up 4 hours
       0.0.0.0:5433->5432/tcp             test-instance
421d443540fb   apache/airflow:2.0.1   "/usr/bin/dumb-init …"   18 hours ago   Up 4 hours (healthy)     
       0.0.0.0:8080->8080/tcp             airflow_docker-airflow-webserver-1
ff4bea4f16dd   apache/airflow:2.0.1   "/usr/bin/dumb-init …"   18 hours ago   Up 4 hours
       8080/tcp                           airflow_docker-airflow-scheduler-1
4cead3ee6667   postgres:13            "docker-entrypoint.s…"   18 hours ago   Up 4 hours (healthy)     
       5432/tcp                           airflow_docker-postgres-1
8bb2cefd456e   apache/airflow:2.2.0   "/usr/bin/dumb-init …"   4 days ago     Up 5 hours (healthy)     
       0.0.0.0:5555->5555/tcp, 8080/tcp   airflow_docker-flower-1
5c4b96d9c5a0   apache/airflow:2.2.0   "/usr/bin/dumb-init …"   4 days ago     Up 5 hours (healthy)     
       8080/tcp                           airflow_docker-airflow-worker-1
3442eae78844   apache/airflow:2.2.0   "/usr/bin/dumb-init …"   4 days ago     Restarting (1) 11 seconds ago                                      airflow_docker-airflow-triggerer-1
7e945051435f   redis:latest           "docker-entrypoint.s…"   4 days ago     Up 5 hours (healthy)     
       6379/tcp                           airflow_docker-redis-1

我在 PgAdmin 上创建了一个新的服务器连接来访问我的数据库:

我可以看到我的数据,一切都很好。

所以现在我创建了这个 dag 来查询该数据库中的数据:

def queryPostgresql():
        conn_string="dbname='postgres' host='localhost' port='5433' user='postgres' password='admin'"
        conn=db.connect(conn_string)
        df=pd.read_sql("select name,city from public.users",conn)
        df.to_csv('postgresqldata.csv')
        print("-------Data Saved------")

当我在气流中运行 dag 时,

[2021-10-17 14:37:16,485] {taskinstance.py:1455} ERROR - could not connect to server: Connection refused
    Is the server running on host "localhost" (127.0.0.1) and accepting
    TCP/IP connections on port 5433?

我在这里做错了什么?这是我应该添加连接的方式吗?

【问题讨论】:

    标签: postgresql docker airflow


    【解决方案1】:

    简答

    将主机更改为; host.docker.internal.

    长答案

    这取决于您使用的操作系统。为了从容器中访问主机的网络,您需要在 docker 中使用主机的 IP 地址。方便的是,在 Windows 和 Max 上,这是使用容器内的域 host.docker.internal 解决的。如docker's documentation中所述:

    我想从容器连接到主机上的服务

    主机有一个不断变化的 IP 地址(如果您没有网络访问权限,则没有)。我们建议您连接到特殊的 DNS 名称 host.docker.internal,它解析为主机使用的内部 IP 地址。这是出于开发目的,不适用于 Docker Desktop for Mac 之外的生产环境。

    在 linux 中也有一个解决方法,已在 What is linux equivalent of "host.docker.internal"

    【讨论】:

      【解决方案2】:

      我的配置几乎相同。如果您的所有容器都在同一个网络中,您可以通过<postgres-container-name>:<port>(在您的情况下为test-instance:5433)访问您的数据库

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-20
        • 1970-01-01
        • 1970-01-01
        • 2021-06-11
        • 2019-09-28
        • 1970-01-01
        • 2022-01-25
        • 1970-01-01
        相关资源
        最近更新 更多