Docker meldet, dass die Installation des Oracle Instant Clients erfolgreich war, bei der Untersuchung des Dateisystems des Containers ist jedoch kein „Oracle“ vorhanden.

Docker meldet, dass die Installation des Oracle Instant Clients erfolgreich war, bei der Untersuchung des Dateisystems des Containers ist jedoch kein „Oracle“ vorhanden.

Meine Docker-Datei sieht so aus

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

und wenn ich Docker Build ausführe, wird auf der Konsole die folgende Meldung angezeigt:

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

Wenn ich jedoch das Dateisystem des Containers untersuche, sehe ich im gesamten Dateisystem keinerlei Verweise auf „Oracle“.

Ich mache Folgendes zum Erkunden

# 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

Was ist los..??

Antwort1

Soweit ich das beurteilen kann, löschen die nachfolgenden FROMZeilen im Dockerfile ( FROM rocker/rstudio...) alles, was getan wurde. Das endgültige Container-Image ist das, was ab dem letzten FROM erstellt wurde. Wenn Sie Dinge aus dem zuvor erstellten Image übernehmen möchten, müssen Sie sie explizit in Ihr aktuelles Image KOPIEREN. Siehe dieDocker-Dokumentation für mehrstufige Builds.

Ich bin mir nicht sicher, ob es praktisch ist, alles abzurufen, was Oracle im ursprünglichen Image benötigt, um es zu kopieren. Vielleicht sollten Sie Folgendes tun:

  1. Installieren/Hinzufügen von Dingen im Oracle-Image.
  2. Erstellen Sie die ersten beiden Images, das Oracle-Image, und kopieren Sie die Dinge in das Oracle-Image.
  3. Haben Sie zwei Container, einen mit dem einfachen Oracle und einen für andere Dinge. Das wäre die übliche Vorgehensweise.

Antwort2

Ich habe Folgendes zum Laufen gebracht.

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

verwandte Informationen