Модуль python-oracledb не может использовать InstantClient в контейнере докеровPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Модуль python-oracledb не может использовать InstantClient в контейнере докеров

Сообщение Anonymous »


Я пытаюсь создать образ 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Добавление xdebug в мой файл докеров php apache приводит к сбою контейнера докеров
    Anonymous » » в форуме Php
    0 Ответы
    130 Просмотры
    Последнее сообщение Anonymous
  • Какая версия PHP и InstantClient наиболее совместима с Oracle 9i?
    Anonymous » » в форуме Php
    0 Ответы
    72 Просмотры
    Последнее сообщение Anonymous
  • Как установить oracle Instantclient и pdo_oci на машину с Ubuntu?
    Anonymous » » в форуме Php
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Как установить oracle Instantclient и pdo_oci на машину с Ubuntu?
    Anonymous » » в форуме Php
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Модуль python-Oracledb не работает в AWS Glue
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»