Docker는 oracle 인스턴트 클라이언트 설치가 성공했다고 말하지만 컨테이너의 파일 시스템을 탐색하면 'oracle'이 없습니다.

Docker는 oracle 인스턴트 클라이언트 설치가 성공했다고 말하지만 컨테이너의 파일 시스템을 탐색하면 'oracle'이 없습니다.

내 도커 파일은 다음과 같습니다

FROM store/oracle/database-instantclient:12.2.0.1

ENV OCI_LIB=/usr/lib/oracle/12.2/client64/lib
ENV OCI_INC=/usr/include/oracle/12.2/client64
ENV LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${OCI_LIB}
ENV PATH=$PATH:/usr/lib/oracle/12.2/client64/bin

FROM rocker/rstudio
FROM rocker/tidyverse

그리고 docker build를 실행할 때. 콘솔에 다음과 같은 메시지가 표시됩니다.

Step 1/15 : FROM store/oracle/database-instantclient:12.2.0.1
12.2.0.1: Pulling from store/oracle/database-instantclient
497341ef9d71: Pulling fs layer
598d27c2564a: Pulling fs layer
497341ef9d71: Verifying Checksum
497341ef9d71: Download complete
497341ef9d71: Pull complete
598d27c2564a: Verifying Checksum
598d27c2564a: Download complete
598d27c2564a: Pull complete
Digest: sha256:e83a2a223a14f24e6e433847d15d817ff7799a3a1a2dd2e4b224437358e996a0
Status: Downloaded newer image for store/oracle/database-instantclient:12.2.0.1

그러나 컨테이너의 파일 시스템을 탐색해 보면 전체 파일 시스템에서 'Oracle'에 대한 참조가 전혀 표시되지 않습니다.

탐색을 위해 다음을 수행합니다.

# find ID of your running container:
docker ps

# create image (snapshot) from container filesystem
docker commit 12345678904b5 mysnapshot

# explore this filesystem using bash (for example)
docker run -t -i mysnapshot /bin/bash

무슨 일이야..??

답변1

내가 알 수 있는 한, FROMDockerfile( FROM rocker/rstudio...)의 다음 줄은 수행된 작업을 모두 지웁니다. 최종 컨테이너 이미지는 마지막 FROM부터 구성됩니다. 이전에 생성된 이미지의 항목을 가져오려면 해당 항목을 현재 이미지에 명시적으로 복사해야 합니다. 참조다단계 빌드에 대한 Docker 문서.

복사하기 위해 초기 이미지에서 Oracle이 요구하는 모든 것을 검색하는 것이 실용적일지 확신할 수 없습니다. 어쩌면 다음 중 하나를 수행해야 할 수도 있습니다.

  1. Oracle 이미지에 항목을 설치/추가합니다.
  2. 처음 두 이미지인 Oracle 이미지를 구성하고 Oracle 이미지에 항목을 복사합니다.
  3. 두 개의 컨테이너가 있습니다. 하나는 일반 Oracle용이고 다른 하나는 작업을 수행하는 일반적인 방법입니다.

답변2

나는 다음과 같은 작업을 수행했습니다.

FROM oraclelinux:7-slim AS oracrap

RUN  yum -y install oracle-release-el7 && yum-config-manager --enable ol7_oracle_instantclient && \
     yum -y install oracle-instantclient18.5-basic oracle-instantclient18.5-devel oracle-instantclient18.5-sqlplus && \
     rm -rf /var/cache/yum && \
     echo /usr/lib/oracle/18.5/client64/lib > /etc/ld.so.conf.d/oracle-instantclient18.5.conf && \
     ldconfig

ENV PATH=$PATH:/usr/lib/oracle/18.5/client64/bin       


FROM rocker/rstudio:3.5.0

COPY --from=oracrap /usr/lib/oracle /usr/lib/oracle/
COPY --from=oracrap /usr/include/oracle /usr/include/oracle/
ENV PATH=$PATH:/usr/lib/oracle/18.5/client64/bin:/usr/lib/oracle/18.5/client64/lib:/usr/include/oracle/18.5/client64/
ENV OCI_LIB=/usr/lib/oracle/18.5/client64/lib
ENV OCI_INC=/usr/include/oracle/18.5/client64
ENV ORACLE_HOME=/usr/lib/oracle/18.5/client64
ENV LD_LIBRARY_PATH=/usr/lib/oracle/18.5/client64/lib
ENV LD_LIBRARY_PATH_64=/usr/lib/oracle/18.5/client64/lib

RUN ln -s /usr/lib/oracle/18.5/client64/lib/libclntsh.so.18.1   libclntsh.so.18.1

FROM rocker/tidyverse:3.5.0

COPY --from=oracrap /usr/lib/oracle /usr/lib/oracle/
COPY --from=oracrap /usr/include/oracle /usr/include/oracle/
ENV PATH=$PATH:/usr/lib/oracle/18.5/client64/bin:/usr/lib/oracle/18.5/client64/lib:/usr/include/oracle/18.5/client64/
ENV OCI_LIB=/usr/lib/oracle/18.5/client64/lib
ENV OCI_INC=/usr/include/oracle/18.5/client64
ENV ORACLE_HOME=/usr/lib/oracle/18.5/client64
ENV LD_LIBRARY_PATH=/usr/lib/oracle/18.5/client64/lib
ENV LD_LIBRARY_PATH_64=/usr/lib/oracle/18.5/client64/lib

RUN ln -s /usr/lib/oracle/18.5/client64/lib/libclntsh.so.18.1  libclntsh.so.18.1

관련 정보