@ragingroland
Хочу быть программистом

Aiflow внутри Docker и локальный PostgreSQL. КАК?

Здравствуйте!
Суть вопроса кратко: как подключиться из эйрфлоу в докере к пгскл который запущен локально?
Суть вопроса не кратко: на моем ноутбуке, который работает на убунту 24.04, установлен postgresql 16, запущен на локалхосте(127.0.0.1):5432, слушает все соединения(listen_addresses= '*'), в пг_хба.конф вот такое:

# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
# host all all 127.0.0.1/32 trust
host all all 127.0.0.1/32 trust
host all all 172.17.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all trust
host replication all 127.0.0.1/32 trust
host replication all ::1/128 trust


в етс/хостс вот такое:

127.0.0.1 kubernetes.docker.internal
127.0.0.1 host.docker.internal:host-gateway
# End of section
127.0.0.1 host.docker.internal
172.17.0.1 docker


Так же, на моем ноутбуке установлен докер:

$ docker version
Client:
Version: 24.0.5
$ docker compose version
Docker Compose version v2.20.3
$ dockerd -v
Docker version 26.1.2, build ef1912d


В докера я затолкал эйрфлоу посредством docker-compose.yaml с оф.сайта аерфло. Самым разнообразным образом крутил настройки в композе, пытался делать билды с присвоением хоста - никаких результатов. При подключение к локальной бд через аерфлоу, посредством запуска дага с скриптом:

from datetime import datetime
from airflow.models import DAG
from airflow.operators.python_operator import PythonOperator
from sqlalchemy import create_engine

def pythonoperator_pg():
conn_url = 'postgresql://пользователь:пароль@локалхост:5432/база'
try:
engine = create_engine(conn_url)
with engine.connect():
return "Connection successful"
except Exception as e:
return "Connection failed:", e

dag = DAG(
'python_operator',
description = 'A PythonOperator',
schedule_interval = '@once',
start_date = datetime.combine(datetime.today(), datetime.min.time()),
catchup = False
)

task_hello_airflow = PythonOperator(
task_id = 'are_you_here_questionmark',
python_callable = pythonoperator_pg,
dag = dag
)


psycopg2.OperationalError connection to server at "127.0.0.1", port 5432 failed: Connection refused Is the server running on that host and accepting TCP/IP connections?'

Пробовал вводить вообще все айпишники которые мог найти в своих коннекшенсах, делал штуку с host.docker.internal, которая описана на оф.сайте докера. Ничего не помогает, я уже не понимаю.

Ребята, я уже пять дней этим занимаюсь, помогите.
  • Вопрос задан
  • 193 просмотра
Пригласить эксперта
Ответы на вопрос 1
@basili4-1982
соиденяться надо не на localhost а на host.docker.internal
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы