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:
cx_Oracle.init_oracle_client (lib_dir =" ... ")
angegebene Pfad$ LD_LIBRARY_PATH
)$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