[PYTHON] Docker-Image, das cx_Oracle verwenden kann

Ich musste über eine Python-App eine Verbindung zur Oracle-Datenbank herstellen und schrieb eine Docker-Datei, um den Python-Client einzufügen, aber ich hatte große Probleme, daher schreibe ich sie als Memorandum.

Dockerfile


FROM python:3.7

RUN pip install cx_Oracle

# Install Oracle Client
ENV ORACLE_HOME=/opt/oracle
ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
RUN apt-get update && apt-get install -y libaio1 && rm -rf /var/lib/apt/lists/* \
 && wget -q https://download.oracle.com/otn_software/linux/instantclient/19600/instantclient-basic-linux.x64-19.6.0.0.0dbru.zip \
 && unzip instantclient-*.zip \
 && mkdir -p $ORACLE_HOME \
 && mv instantclient_19_6 $ORACLE_HOME/lib \
 && rm -f instantclient-*.zip

cx_Oracle 8 Initialization — cx_Oracle 8.0.0 documentation

Gemäß der offiziellen Dokumentation muss die Oracle Client-Bibliothek installiert sein, um cx_Oracle verwenden zu können, und cx_Oracle versucht, die Bibliothek in der folgenden Reihenfolge zu laden:

  1. Der durch cx_Oracle.init_oracle_client (lib_dir =" ... ") angegebene Pfad
  2. Pfad der Betriebssystembibliothek ($ LD_LIBRARY_PATH)
  3. $ORACLE_HOME/lib

Als ich versuchte, die Methoden "1." und "3." zu verwenden, war ich sehr beunruhigt, weil ich die Fehlermeldung "Es gibt keine solche Datei" nur für "libnnz19.so" erhielt, obwohl andere Bibliotheken gelesen werden können. Die Ursache ist noch unbekannt.

Ich habe die Methode 2. ausprobiert und sie wurde ohne Probleme geladen.

Recommended Posts

Docker-Image, das cx_Oracle verwenden kann
Erstellen Sie eine Docker-Umgebung, die PyTorch und JupyterLab verwenden kann
Verwenden Sie die Verschlüsselung der Verschlüsselungsbibliothek mit dem Python-Image von Docker
Skflow, der TensorFlow wie Scicit-Learn verwenden kann
Ich habe ein Docker-Image erstellt, das FBX SDK Python von Node.js aus aufrufen kann
Belichten Sie Ihr Docker-Image
ANTs Bildregistrierung, die in 5 Minuten verwendet werden kann
Verwenden Sie Python mit Docker
Jupyter Docker Bildzusammenfassung
Anwendungsfälle, die Sie motivieren, Docker zu verwenden, die Sie noch nie verwendet haben
Versuchen Sie es mit Jupyters Docker-Image