docker base 이미지를 기본 ubuntu를 쓰다가 alpine 이미지로 변경을 하는 과정에서 오라클 클라이언트 설치 이슈를 정리한 글 입니다. 제가 이렇게 해서 설치 및 연결이 되었다 정도이니 참조만 하시기 바랍니다.
아래 stack overflow에 답변 내용을 참조 하였습니다.
https://stackoverflow.com/questions/53263972/oracle-on-alpine-linux
Oracle on Alpine linux
I am trying to install OCI8 extension on my Alpine Linux Docker environment. Although there are several places saying it won't work, there are some which say it actually does. I have a 3.4 version ...
stackoverflow.com
우선 제가 설치 성공한 Dockerfile 입니다. 설치 패키지와 설치 파일명을 맞추셔야 합니다.
FROM python:3.8.13-alpine3.16
MAINTAINER Tamguan
RUN pip install --upgrade pip
RUN apk add --no-cache --virtual .build-deps \
ca-certificates gcc linux-headers musl-dev \
libffi-dev jpeg-dev zlib-dev
RUN apk add --no-cache \
python3-dev openldap-dev \
unzip redis openrc \
vim curl apache2 apache2-utils \
apache2-mod-wsgi apache2-proxy apache2-ssl nghttp2-libs \
libaio libnsl gcompat
# libnsl libnsl gcompat 오라클 클라이언트 필요 패키지
#install oracle client
RUN mkdir -p /opt/oracle
RUN mkdir -p /usr/lib/instantclient/lib
WORKDIR /opt/oracle/
RUN wget https://download.oracle.com/otn_software/linux/instantclient/185000/instantclient-basiclite-linux.x64-18.5.0.0.0dbru.zip && \
unzip instantclient-basiclite-linux.x64-18.5.0.0.0dbru.zip && \
cp -r instantclient_18_5/* /usr/lib/instantclient/lib && \
rm instantclient-basiclite-linux.x64-18.5.0.0.0dbru.zip
RUN ln -s /usr/lib/instantclient/lib/libclntsh.so.18.1 /usr/lib/libclntsh.so && \
ln -s /usr/lib/instantclient/lib/libocci.so.18.1 /usr/lib/libocci.so && \
ln -s /usr/lib/instantclient/lib/libociicus.so /usr/lib/libociicus.so && \
ln -s /usr/lib/instantclient/lib/libnnz18.so /usr/lib/libnnz18.so && \
ln -s /usr/lib/libnsl.so.3 /usr/lib/libnsl.so.1 && \
ln -s /usr/lib/libc.so /usr/lib/libresolv.so.2 && \
ln -s /lib/ld-linux-x86-64.so.2 /usr/lib/ld-linux-x86-64.so.2
ENV ORACLE_BASE /usr/lib/instantclient/lib
ENV LD_LIBRARY_PATH /usr/lib/instantclient/lib
ENV TNS_ADMIN /usr/lib/instantclient/lib
1. No such file or diretory
아래와 같이 django에서 lib 파일을 계속 적으로 읽을수 없다고 나오는 경우 관련 패키지를 찾아서 설치하셔야 합니다.
저는 libaio, libnsl, gcompat 패키지가 없어서 아래와 같이 파일을 못찾는 에러가 계속적으로 발생했습니다.
DPI-1047: Cannot locate a 64-bit Oracle Client library: "Error loading shared library libnsl.so.1: No such file or directory (needed by /lib/libclntsh.so)". See https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html for help
/lib/ld-linux-x86-64.so.2 파일의 패키지인 gcompat 패키지를 설치하였고, 파일명 확인하시고 link 파일 생성하시면 됩니다.(다른 인터넷 예제와 다르게 so.2로 끝나는 파일이었습니다.)
2. LD_LIBRARY_PATH
LD_LIBRARY_PATH가 처음 /opt/lib/instantclient로 지정했는데 자동으로 /opt/lib/instantclient/lib로 지정되어 파일을 찾지 못하는 에러가 발생하였습니다.
마지막 경로가 ../lib로 끝나는 경로로 지정해줘야 하는 문제가 있었습니다.
/opt/lib/ , /lib 경로에 바로 링크파일을 생성하시면 됩니다.
감사합니다.
'docker 마이크로서비스' 카테고리의 다른 글
docker engine API 사용하기 (0) | 2022.01.13 |
---|---|
docker EE DTR 설치 (0) | 2020.08.07 |
Docker container Django + Channels + apache (0) | 2020.04.27 |
Docker for windows ca.pem 에러 해결 (0) | 2019.12.18 |
docker-machine SCP 명령어 (0) | 2019.09.26 |