#docker #configure #prefect
#docker #настройка #префект
Вопрос:
Возникли трудности с настройкой Prefect для локального запуска. Устанавливается через pip3, зависит от docker (уже установленного) и docker-compose, установлен, протестирован. работает.
У меня уже есть работающий сервер Postgres, я хотел бы настроить его на использование. Но похоже, что он используется и в docker? Любая помощь приветствуется.
При запуске:
prefect backend server
prefect server start
невозможно найти изображение ‘docker / compose: 1.27.4’ локально
1.27.4: извлечение из docker / compose (загружает и запускает docker)
Статус: Загружено новое изображение для docker / compose: 1.27.4
ПРЕДУПРЕЖДЕНИЕ: переменная PREFECT_SERVER_DB_CMD не установлена. По умолчанию пустая строка
ПРЕДУПРЕЖДЕНИЕ: переменная DB_CONNECTION_URL не установлена. По умолчанию пустая строка
ПРЕДУПРЕЖДЕНИЕ: переменная POSTGRES_DB не установлена. По умолчанию отображается пустое
ПРЕДУПРЕЖДЕНИЕ: переменная POSTGRES_PASSWORD не установлена. По умолчанию используется пустая строка>
ПРЕДУПРЕЖДЕНИЕ: переменная POSTGRES_USER не установлена. По умолчанию используется пустая строка.
Ответ №1:
Если вы обратитесь к документации prefect server start
, вы должны найти всю необходимую информацию:
prefect server start --help
...
--use-volume Enable the use of a volume for the Postgres service
--volume-path TEXT A path to use for the Postgres volume, defaults to
'~/.prefect/pg_data'
Комментарии:
1. Спасибо, однако проблема заключается в переменных среды, которые правильно передаются дочерней задаче, но docker-compose up их не распознает.
Ответ №2:
Проблема, с которой я столкнулся, связана с тем, как запускается подпроцесс в Python, Popen( docker-compose up, env = env) (Текущие) переменные среды передаются при выполнении этой команды, но каким-то образом недоступны в дочерней задаче.
docker-compose up
Я скорректировал server.py кодируйте и создавайте .env
файл «на лету». Для тестирования и docker-compose находит и использует его.
Реальная проблема заключается в среде терминала bash / sh, и именно здесь мне нужно присмотреться.
Ответ №3:
Теперь Prefect позволяет вам делать это напрямую, не запуская пользовательские скрипты «на лету».
Вам просто нужно указать --external-postgres
флаг.
prefect server start --postgres-url postgres://<username>:<password>@hostname:<port>/<dbname>
ИЛИ вы также можете добавить его в .prefect/config.toml
:
[server.database]
connection_url = "postgres://<username>:<password>@hostname:<port>/<dbname> "