Я настроил 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? Что не так ...