#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 и т. Д., Но, скорее всего, это ваши самые простые варианты.