Воздушный поток с докером подключается к локальному хосту PostgreSQL

#docker #airflow

Вопрос:

Я запускаю воздушный поток с докером.

Я хочу запросить некоторые данные в моем PostgresSQL, который находится на моем локальном хосте.

это моя связь в моем dag:

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

Я добавляю подключение к воздушному потоку:

введите описание изображения здесь

 psycopg2.OperationalError: 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 5432?
 

Можно ли выполнить запрос в моем PgSQL из моего докера Airflow? Должен ли я вместо этого установить PgSQL в docker?

Ответ №1:

Когда вы пытаетесь получить доступ localhost к воздушному потоку, он пытается подключиться к Postgres, работающему в контейнере воздушного потока, которого там нет. localhost по умолчанию из контейнера не выполняется маршрутизация на хост-машину Docker.

Пара вариантов:

  • Подключитесь к хосту Docker с host.docker.internal помощью вместо localhost
  • Запустите Airflow и Postgres в докере, создайте сеть и подключитесь через имя контейнера ( psql и т. Д.).

Есть несколько других методов с файлами hosts и т. Д., Но, скорее всего, это ваши самые простые варианты.