Выполнить psql команд в Python subprocess.check_call внутри Docker контейнера - PullRequest
0 голосов
/ 02 апреля 2020

Я настроил Docker контейнер с PostgreSQL DB и Python внутри. При запуске контейнера выполняется сценарий. sh - имеется несколько команд python (для обработки данных geo json и последующей их вставки в базу данных).

Моя команда запуска -

* Функции 1004 *

My Python также оценивают вставки в db (psycopg2). При использовании простых SQL запросов (clean SQL) - cursor.execute отлично работает.

Дело в том, что теперь у меня есть запросы с psql командами (\gset, \if...\endif) - я должен использовать subprocess.check_call с psql внутри скрипта Python.

Я выяснил, что мне нужно установить postgresql-client внутри контейнера, поэтому я добавил в Dockerfile:

FROM python:3.6.8-alpine3.9
...
RUN adduser -D -u 1000 my-user
COPY --chown=my-user:1000 . /app

RUN apk --update add postgresql-dev postgresql-client bash ...
...
WORKDIR /app
ENTRYPOINT ["sh", "generation"]

Но когда выполнение скрипта завершается неудачно с

psql: command not found
psql: could not find own program executable

Полагаю, дело в том, что psql не в ПУТИ пользователя postgres. Каким образом я могу исправить это внутри Docker контейнера? Я пытался использовать locate psql, но безуспешно - locate: not found.

Может быть, есть идеи?

ОБНОВЛЕНИЕ: Я попытался подключиться к своей БД и запустить psql:

docker exec -t -i myContainer /bin/bash
psql -U test-user -d test-db

Это работает! Также я нахожу psql в интерактивном режиме:

find / -name psql

И получаю / usr / lib / postgresql / 11 / bin / psql

Почему psql не найден при выполнении с Python? Что не так ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...