簡體   English   中英

Oracle Instant 客戶端的 Alpine 依賴地獄

[英]Alpine dependency hell with Oracle Instant client

我正在嘗試使用 cx_Oracle(需要 oracle 即時客戶端)從我的 Alpine Linux 容器建立 oracle 連接。 cx_oracle 不斷抱怨缺少 Oracle 即時客戶端所需的不同庫

錯誤:

con = cx_Oracle.connect('user/pass@127.0.0.1/orcl') 回溯(最近一次調用最后一次):文件“”,第 1 行,在

cx_Oracle.DatabaseError:DPI-1047:找不到 64 位 Oracle 客戶端庫:“加載共享庫 libnsl.so.1 時出錯:沒有這樣的文件或目錄(/usr/lib/libclntsh.so 需要)”。

Dockerfile:

FROM alpine-base
COPY /app /base/app
COPY requirements.txt /base
COPY instantclient_12_2.zip /base
COPY instantclient_sqlplus_12_2.zip /base
COPY run_app.py /base
COPY oratest.py /base/oratest.py
WORKDIR /base
RUN apk add libaio libnsl openssl-dev musl-dev libffi-dev && \
    apk add openssl-dev && \
    pip install cryptography==2.2.2 && \  
    apk add libressl-dev && \
    pip install cx_Oracle
    unzip /base/instantclient_12_2.zip && \
    unzip /base/instantclient_sqlplus_12_2.zip && \
    mv /base/instantclient_12_2/ /usr/lib/ && \
    rm -rf /base/instantclient_12_2.zip && \
    ln /usr/lib/instantclient_12_2/libclntsh.so.12.1 /usr/lib/libclntsh.so && \
    ln /usr/lib/instantclient_12_2/libocci.so.12.1 /usr/lib/libocci.so && \
    ln /usr/lib/instantclient_12_2/libociei.so /usr/lib/libociei.so && \
    ln /usr/lib/instantclient_12_2/libnnz12.so /usr/lib/libnnz12.so
ENV ORACLE_BASE /usr/lib/instantclient_12_2
ENV LD_LIBRARY_PATH /usr/lib/instantclient_12_2
ENV TNS_ADMIN /usr/lib/instantclient_12_2
ENV ORACLE_HOME /usr/lib/instantclient_12_2
RUN pip install -r /base/requirements.txt 
EXPOSE 8080
CMD [ "python", "/base/run_app.py" ]

有什么我在這里想念的嗎? 我幾乎已經完成了與 oracle 即時客戶端的依賴關系的斗爭 - 有沒有更好的方法可以從 alpine 建立 Oracle 連接

我想看看是否有人在 alpine linux 中成功運行 cx_Oracle

您可能可以安裝 libnsl 來解決這個問題( https://pkgs.alpinelinux.org/package/edge/community/x86/libnsl ),但是 - 我建議避免使用 Alpine。

  1. 你沒有二進制輪子,所以你必須自己編譯包,這會讓事情變得更難,你的圖像更大。
  2. C 庫非常不同,有些東西偶爾會中斷。

所有這些都是為了一個稍微小一點的圖像(假設編譯器的需要最終沒有使它變大)。

長版: https : //pythonspeed.com/articles/base-image-python-docker-images/

重復我之前的觀點

我建議使用 Oracle 支持的操作系統,從而避免黑客入侵 Alpine 的頭痛以及它不會在關鍵時刻崩潰的不確定性。 從而讓您有信心您的業務不會受到負面影響。 試試https://github.com/oracle/docker-images/blob/master/OracleInstantClient/dockerfiles/19/Dockerfile

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM