Модуль python-oracledb не может использовать InstantClient в контейнере докеров ⇐ Python
Модуль python-oracledb не может использовать InstantClient в контейнере докеров
Я пытаюсь создать образ Docker для доступа к базе данных Oracle во время выполнения у меня появляется следующее сообщение об ошибке: DPI-1047: невозможно найти 64-разрядную клиентскую библиотеку Oracle: «/oracle/instantclient/libclntsh.so: невозможно открыть файл общего объекта: нет такого файла или каталога ".
Внутри контейнера на самом деле есть символическая ссылка на /oracle/instantclient/libclntsh.so
Файл Docker:
ИЗ Python:3.12-slim ЗАПУСК apt-get update && \ apt-get install -y wget распаковать ARG ORACLE_HOME=/оракул ARG ORACLE_CLIENT_HOME=${ORACLE_HOME}/мгновенный клиент # Загрузите и установите Oracle InstantClient ЗАПУСК mkdir /tmp/oracle && \ wget https://download.oracle.com/otn_softwar ... .0dbru.zip -P /tmp/oracle && \ разархивируйте /tmp/oracle/instantclient-basic-* -d /tmp/oracle && \ mkdir ${ORACLE_HOME} && \ мв /tmp/oracle/instantclient_* ${ORACLE_CLIENT_HOME} ENV LD_LIBRARY_PATH="${ORACLE_CLIENT_HOME}" RUN pip install --upgrade pip && \ pip установить Pipenv ЕНВ PIPENV_VENV_IN_PROJECT=1 РАБОЧИЙ ДИАПАЗОН/приложение ДОБАВИТЬ main.py Pipfile Pipfile.lock ./ Запустить синхронизацию Pipenv ENTRYPOINT ["./.venv/bin/python", "main.py"] ЦМД [""] main.py:
импортировать ОС импортировать OracleDB защита print_db_version(db_config): params = oracledb.ConnectParams(host=db_config['host'], port=db_config['port'], service_name=db_config['name']) с oracledb.connect(user=db_config['username'],password=db_config['password'], params=params) как conn: print(f'Версия базы данных: {conn.version}') конн.закрыть() если __name__ == '__main__': # Оба вызова ниже завершаются неудачно... # oracledb.init_oracle_client() oracledb.init_oracle_client(os.environ['LD_LIBRARY_PATH']) db_config = { 'хост': os.environ['DB_HOST'], 'порт': os.environ['DB_PORT'], 'имя': os.environ['DB_NAME'], 'имя пользователя': os.environ['DB_USERNAME'], 'пароль': os.environ['DB_PASSWORD'], } print_db_version (db_config) Пип-файл:
[[источник]] URL = "https://pypi.org/simple" проверить_ssl = правда имя = "Пипи" [пакеты] оракулб = "1.4.2" командные строки (последняя позволяет исследовать контейнер):
docker build -t my-version . докер запустить мою версию docker run -it --entrypoint "" моя версия bash Я не могу понять, почему появляется эта ошибка, хотя библиотека действительно установлена в моем контейнере... есть идеи?
ИЗМЕНИТЬ
Я попробовал предложения Энтони Туининга и получил следующий результат:
ODPI [00001] 2023-10-21 19:13:32.206: ODPI-C 5.0.1 ODPI [00001] 21.10.2023 19:13:32.206: сообщения отладки инициализируются на уровне 64. ODPI [00001] 2023-10-21 19:13:32.206: Параметры контекста: ODPI [00001] 21.10.2023 19:13:32.206: Каталог клиентской библиотеки Oracle: /oracle/instantclient ODPI [00001] 21.10.2023 19:13:32.206: Переменные среды: ODPI [00001] 21 октября 2023 19:13:32.206: LD_LIBRARY_PATH => "/oracle/instantclient" ODPI [00001] 21.10.2023 19:13:32.206: загрузка в каталог параметров ODPI [00001] 2023-10-21 19:13:32.206: загрузить в каталог /oracle/instantclient ODPI [00001] 2023-10-21 19:13:32.206: загрузить с именем /oracle/instantclient/libclntsh.so ODPI [00001] 2023-10-21 19:13:32.206: загрузка из-за сбоя ОС: /oracle/instantclient/libclntsh.so: невозможно открыть общий объектный файл: такого файла или каталога нет ODPI [00001] 2023-10-21 19:13:32.206: загрузить с именем /oracle/instantclient/libclntsh.so.19.1 ODPI [00001] 2023-10-21 19:13:32.207: загрузка из-за сбоя ОС: /oracle/instantclient/libclntsh.so.19.1: невозможно открыть файл общего объекта: нет такого файла или каталога ODPI [00001] 2023-10-21 19:13:32.207: загрузить с именем /oracle/instantclient/libclntsh.so.18.1 ODPI [00001] 2023-10-21 19:13:32.207: загрузка из-за сбоя ОС: /oracle/instantclient/libclntsh.so.18.1: невозможно открыть файл общего объекта: нет такого файла или каталога ODPI [00001] 2023-10-21 19:13:32.207: загрузить с именем /oracle/instantclient/libclntsh.so.12.1 ODPI [00001] 2023-10-21 19:13:32.207: загрузка из-за сбоя ОС: /oracle/instantclient/libclntsh.so.12.1: невозможно открыть файл общего объекта: нет такого файла или каталога ODPI [00001] 2023-10-21 19:13:32.207: загрузить с именем /oracle/instantclient/libclntsh.so.11.1 ODPI [00001] 2023-10-21 19:13:32.207: загрузка из-за сбоя ОС: /oracle/instantclient/libclntsh.so.11.1: невозможно открыть файл общего объекта: нет такого файла или каталога ODPI [00001] 2023-10-21 19:13:32.207: загрузить с именем /oracle/instantclient/libclntsh.so.20.1 ODPI [00001] 2023-10-21 19:13:32.207: загрузка из-за сбоя ОС: /oracle/instantclient/libclntsh.so.20.1: невозможно открыть общий объектный файл: такого файла или каталога нет ODPI [00001] 2023-10-21 19:13:32.207: загрузить с именем /oracle/instantclient/libclntsh.so.21.1 ODPI [00001] 2023-10-21 19:13:32.207: загрузка из-за сбоя ОС: /oracle/instantclient/libclntsh.so.21.1: невозможно открыть общий объектный файл: такого файла или каталога нет Traceback (последний вызов последний): Файл «/app/main.py», строка 18, в ['libocci.so.19.1', 'libnnz19.so', 'adrci', 'libipc1.so', 'xstreams.jar', 'libclntsh.so.11.1', 'libclntsh.so.18.1', 'genezi' , 'libocci.so.12.1', 'сеть', 'libocci.so.10.1', 'libocci.so', 'libociei.so', 'libclntsh.so', 'libclntsh.so.12.1', 'libocci. so.18.1', 'libclntsh.so.19.1', 'ucp.jar', 'BASIC_LICENSE', 'libocijdbc19.so', 'ojdbc8.jar', 'BASIC_README', 'libmql1.so', 'liboramysql19.so' , 'libocci.so.11.1', 'libclntshcore.so.19.1', 'libclntsh.so.10.1', 'uidrvci'] oracledb.init_oracle_client(os.environ['LD_LIBRARY_PATH']) Файл «src/oracledb/impl/thick/utils.pyx», строка 476, в oracledb.thick_impl.init_oracle_client Файл «src/oracledb/impl/thick/utils.pyx», строка 500, в oracledb.thick_impl.init_oracle_client Файл «src/oracledb/impl/thick/utils.pyx», строка 421, в oracledb.thick_impl._raise_from_info oracledb.Exceptions.DatabaseError: DPI-1047: невозможно найти 64-разрядную клиентскую библиотеку Oracle: «/oracle/instantclient/libclntsh.so: невозможно открыть общий объектный файл: нет такого файла или каталога». См. https://python-oracledb.readthedocs.io/ ... ation.html для получения помощи. Это показывает, что:
Для [*]LD_LIBRARY_PATH правильно установлено значение /oracle/instantclient [*]мгновенный клиент фактически ищется в этом каталоге [*]/oracle/instantclient на самом деле содержит файл libclntsh.so (на самом деле это символическая ссылка на libclntsh.so.19.1
Для меня это звучит довольно странно...
Я разместил исходный код здесь: https://github.com/galak75/python-oracle-img
Я пытаюсь создать образ Docker для доступа к базе данных Oracle во время выполнения у меня появляется следующее сообщение об ошибке: DPI-1047: невозможно найти 64-разрядную клиентскую библиотеку Oracle: «/oracle/instantclient/libclntsh.so: невозможно открыть файл общего объекта: нет такого файла или каталога ".
Внутри контейнера на самом деле есть символическая ссылка на /oracle/instantclient/libclntsh.so
Файл Docker:
ИЗ Python:3.12-slim ЗАПУСК apt-get update && \ apt-get install -y wget распаковать ARG ORACLE_HOME=/оракул ARG ORACLE_CLIENT_HOME=${ORACLE_HOME}/мгновенный клиент # Загрузите и установите Oracle InstantClient ЗАПУСК mkdir /tmp/oracle && \ wget https://download.oracle.com/otn_softwar ... .0dbru.zip -P /tmp/oracle && \ разархивируйте /tmp/oracle/instantclient-basic-* -d /tmp/oracle && \ mkdir ${ORACLE_HOME} && \ мв /tmp/oracle/instantclient_* ${ORACLE_CLIENT_HOME} ENV LD_LIBRARY_PATH="${ORACLE_CLIENT_HOME}" RUN pip install --upgrade pip && \ pip установить Pipenv ЕНВ PIPENV_VENV_IN_PROJECT=1 РАБОЧИЙ ДИАПАЗОН/приложение ДОБАВИТЬ main.py Pipfile Pipfile.lock ./ Запустить синхронизацию Pipenv ENTRYPOINT ["./.venv/bin/python", "main.py"] ЦМД [""] main.py:
импортировать ОС импортировать OracleDB защита print_db_version(db_config): params = oracledb.ConnectParams(host=db_config['host'], port=db_config['port'], service_name=db_config['name']) с oracledb.connect(user=db_config['username'],password=db_config['password'], params=params) как conn: print(f'Версия базы данных: {conn.version}') конн.закрыть() если __name__ == '__main__': # Оба вызова ниже завершаются неудачно... # oracledb.init_oracle_client() oracledb.init_oracle_client(os.environ['LD_LIBRARY_PATH']) db_config = { 'хост': os.environ['DB_HOST'], 'порт': os.environ['DB_PORT'], 'имя': os.environ['DB_NAME'], 'имя пользователя': os.environ['DB_USERNAME'], 'пароль': os.environ['DB_PASSWORD'], } print_db_version (db_config) Пип-файл:
[[источник]] URL = "https://pypi.org/simple" проверить_ssl = правда имя = "Пипи" [пакеты] оракулб = "1.4.2" командные строки (последняя позволяет исследовать контейнер):
docker build -t my-version . докер запустить мою версию docker run -it --entrypoint "" моя версия bash Я не могу понять, почему появляется эта ошибка, хотя библиотека действительно установлена в моем контейнере... есть идеи?
ИЗМЕНИТЬ
Я попробовал предложения Энтони Туининга и получил следующий результат:
ODPI [00001] 2023-10-21 19:13:32.206: ODPI-C 5.0.1 ODPI [00001] 21.10.2023 19:13:32.206: сообщения отладки инициализируются на уровне 64. ODPI [00001] 2023-10-21 19:13:32.206: Параметры контекста: ODPI [00001] 21.10.2023 19:13:32.206: Каталог клиентской библиотеки Oracle: /oracle/instantclient ODPI [00001] 21.10.2023 19:13:32.206: Переменные среды: ODPI [00001] 21 октября 2023 19:13:32.206: LD_LIBRARY_PATH => "/oracle/instantclient" ODPI [00001] 21.10.2023 19:13:32.206: загрузка в каталог параметров ODPI [00001] 2023-10-21 19:13:32.206: загрузить в каталог /oracle/instantclient ODPI [00001] 2023-10-21 19:13:32.206: загрузить с именем /oracle/instantclient/libclntsh.so ODPI [00001] 2023-10-21 19:13:32.206: загрузка из-за сбоя ОС: /oracle/instantclient/libclntsh.so: невозможно открыть общий объектный файл: такого файла или каталога нет ODPI [00001] 2023-10-21 19:13:32.206: загрузить с именем /oracle/instantclient/libclntsh.so.19.1 ODPI [00001] 2023-10-21 19:13:32.207: загрузка из-за сбоя ОС: /oracle/instantclient/libclntsh.so.19.1: невозможно открыть файл общего объекта: нет такого файла или каталога ODPI [00001] 2023-10-21 19:13:32.207: загрузить с именем /oracle/instantclient/libclntsh.so.18.1 ODPI [00001] 2023-10-21 19:13:32.207: загрузка из-за сбоя ОС: /oracle/instantclient/libclntsh.so.18.1: невозможно открыть файл общего объекта: нет такого файла или каталога ODPI [00001] 2023-10-21 19:13:32.207: загрузить с именем /oracle/instantclient/libclntsh.so.12.1 ODPI [00001] 2023-10-21 19:13:32.207: загрузка из-за сбоя ОС: /oracle/instantclient/libclntsh.so.12.1: невозможно открыть файл общего объекта: нет такого файла или каталога ODPI [00001] 2023-10-21 19:13:32.207: загрузить с именем /oracle/instantclient/libclntsh.so.11.1 ODPI [00001] 2023-10-21 19:13:32.207: загрузка из-за сбоя ОС: /oracle/instantclient/libclntsh.so.11.1: невозможно открыть файл общего объекта: нет такого файла или каталога ODPI [00001] 2023-10-21 19:13:32.207: загрузить с именем /oracle/instantclient/libclntsh.so.20.1 ODPI [00001] 2023-10-21 19:13:32.207: загрузка из-за сбоя ОС: /oracle/instantclient/libclntsh.so.20.1: невозможно открыть общий объектный файл: такого файла или каталога нет ODPI [00001] 2023-10-21 19:13:32.207: загрузить с именем /oracle/instantclient/libclntsh.so.21.1 ODPI [00001] 2023-10-21 19:13:32.207: загрузка из-за сбоя ОС: /oracle/instantclient/libclntsh.so.21.1: невозможно открыть общий объектный файл: такого файла или каталога нет Traceback (последний вызов последний): Файл «/app/main.py», строка 18, в ['libocci.so.19.1', 'libnnz19.so', 'adrci', 'libipc1.so', 'xstreams.jar', 'libclntsh.so.11.1', 'libclntsh.so.18.1', 'genezi' , 'libocci.so.12.1', 'сеть', 'libocci.so.10.1', 'libocci.so', 'libociei.so', 'libclntsh.so', 'libclntsh.so.12.1', 'libocci. so.18.1', 'libclntsh.so.19.1', 'ucp.jar', 'BASIC_LICENSE', 'libocijdbc19.so', 'ojdbc8.jar', 'BASIC_README', 'libmql1.so', 'liboramysql19.so' , 'libocci.so.11.1', 'libclntshcore.so.19.1', 'libclntsh.so.10.1', 'uidrvci'] oracledb.init_oracle_client(os.environ['LD_LIBRARY_PATH']) Файл «src/oracledb/impl/thick/utils.pyx», строка 476, в oracledb.thick_impl.init_oracle_client Файл «src/oracledb/impl/thick/utils.pyx», строка 500, в oracledb.thick_impl.init_oracle_client Файл «src/oracledb/impl/thick/utils.pyx», строка 421, в oracledb.thick_impl._raise_from_info oracledb.Exceptions.DatabaseError: DPI-1047: невозможно найти 64-разрядную клиентскую библиотеку Oracle: «/oracle/instantclient/libclntsh.so: невозможно открыть общий объектный файл: нет такого файла или каталога». См. https://python-oracledb.readthedocs.io/ ... ation.html для получения помощи. Это показывает, что:
Для [*]LD_LIBRARY_PATH правильно установлено значение /oracle/instantclient [*]мгновенный клиент фактически ищется в этом каталоге [*]/oracle/instantclient на самом деле содержит файл libclntsh.so (на самом деле это символическая ссылка на libclntsh.so.19.1
Для меня это звучит довольно странно...
Я разместил исходный код здесь: https://github.com/galak75/python-oracle-img
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Добавление xdebug в мой файл докеров php apache приводит к сбою контейнера докеров
Anonymous » » в форуме Php - 0 Ответы
- 130 Просмотры
-
Последнее сообщение Anonymous
-