LoginSignup
9
5

More than 3 years have passed since last update.

cx_Oracle が使える Docker イメージ

Last updated at Posted at 2020-06-30

Python アプリから Oracle データベースに繋ぐ必要があり Python クライアントを入れる Dockerfile を書いたのだが、やたら苦労したので備忘録として書いておく。

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

公式ドキュメントによると、cx_Oracle を利用するためには Oracle Client ライブラリがインストールされている必要があり、cx_Oracle は次の順序でライブラリの読み込みを試行する。

  1. cx_Oracle.init_oracle_client(lib_dir="...") で指定したパス
  2. OS のライブラリパス ($LD_LIBRARY_PATH)
  3. $ORACLE_HOME/lib

このうち 1.3. の方法で試したときに、他のライブラリは読み込めるのに libnnz19.so だけ「そんなファイルは無い」などとエラーが出て大変困った。
原因はいまだにわからない。

2. の方法を試したところ問題なく読み込まれた。

9
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
5