【问题标题】:Install oracle client in docker container在 docker 容器中安装 oracle 客户端
【发布时间】:2019-09-15 11:22:37
【问题描述】:

我使用 alpine linux 作为基础镜像,我需要安装一个 oracle 客户端原生库。我相信你可以从这里下载:

https://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html

  1. 看来我必须登录才能下载,有人知道如何在不登录的情况下下载客户端库的 zip 文件吗?

  2. 有人知道如何在 bash 脚本或 dockerfile 中正确安装客户端库吗?

【问题讨论】:

  • 为了记录,最近的Instant Client无需登录或点击即可下载。

标签: oracle docker dockerfile alpine oracleclient


【解决方案1】:

我想出了一些在ubuntu Docker 中安装 Oracle 即时客户端的不同方法,它可能对其他人有所帮助

按照这些简单的步骤:

  1. oracle官方下载中心下载oracle即时客户端(.rpm文件)

  2. 转换为.deb(您可以使用apt-get install alien)并移动到您的工作目录中的某个位置。

  3. 现在更新您的Dockerfile 并进行构建

    RUN apt-get update
    WORKDIR /opt
    ADD ./ORACLE-INSTANT-CLIENT.deb  /opt
    #if libaio also required
    RUN apt-get install libaio1 
    RUN dpkg -i oracle-instantclient.deb
    

【讨论】:

    【解决方案2】:

    这是基于 Debian 10 (Buster) 的官方 PHP-FPM 映像的有效解决方案。以下Dockerfile 使用 RPM 包和alien 安装 Oracle Instant Client 18.5(basiclitedevel)。

    正如 Christopher Jones 所写,这些文件目前无需 Oracle 帐户即可下载。

    FROM php:7.2.32-fpm
    
    # see https://help.ubuntu.com/community/Oracle%20Instant%20Client
    RUN apt-get update && apt-get install -y --no-install-recommends alien libaio1 wget && \
        wget https://download.oracle.com/otn_software/linux/instantclient/185000/oracle-instantclient18.5-basiclite-18.5.0.0.0-3.x86_64.rpm && \
        wget https://download.oracle.com/otn_software/linux/instantclient/185000/oracle-instantclient18.5-devel-18.5.0.0.0-3.x86_64.rpm && \
        alien -i oracle-instantclient18.5-basiclite-18.5.0.0.0-3.x86_64.rpm && \
        alien -i oracle-instantclient18.5-devel-18.5.0.0.0-3.x86_64.rpm
    ENV LD_LIBRARY_PATH="/usr/lib/oracle/18.5/client64/lib:${LD_LIBRARY_PATH}"
    

    【讨论】:

    • 我以为外星人转换了 RPM 包的 ldconfig 后安装脚本。如果它确实转换了它,那么你不需要设置 LD_LIBRARY_PATH (现在你可以获得 19.8,它连接到与 18 相同的数据库版本)
    【解决方案3】:
    FROM ruby:3.0
    
    
    ENV LD_LIBRARY_PATH=/opt/oracle/instantclient_21_4
    
    RUN apt-get update && \
        apt-get install -y libpq-dev zlib1g-dev build-essential shared-mime-info libaio1 libaio-dev unzip wget --no-install-recommends && \
        wget https://download.oracle.com/otn_software/linux/instantclient/214000/instantclient-sdk-linux.x64-21.4.0.0.0dbru.zip && \
        wget https://download.oracle.com/otn_software/linux/instantclient/214000/instantclient-sqlplus-linux.x64-21.4.0.0.0dbru.zip && \
        wget https://download.oracle.com/otn_software/linux/instantclient/214000/instantclient-basic-linux.x64-21.4.0.0.0dbru.zip && \
        mkdir -p /opt/oracle && \
        cp instantclient-* /opt/oracle/ && \
        cd /opt/oracle/ && \
        unzip instantclient-basic-linux.x64-21.4.0.0.0dbru.zip && \
        unzip instantclient-sdk-linux.x64-21.4.0.0.0dbru.zip && \
        unzip instantclient-sqlplus-linux.x64-21.4.0.0.0dbru.zip && \
        rm -rf /var/lib/apt/lists/* instantclient-basic-linux.x64-21.4.0.0.0dbru.zip instantclient-sdk-linux.x64-21.4.0.0.0dbru.zip instantclient-sqlplus-linux.x64-21.4.0.0.0dbru.zip && \
        apt -y clean && \
        apt -y remove wget unzip && \
        apt -y autoremove && \
        rm -rf /var/cache/apt
    

    您可以通过指定上面的版本来下载特定版本的instantclient

    如果您使用的是 ruby​​ on rails 应用程序,则这两个包是 ruby​​-oci 所必需的

    libaio1

    libaio-dev

    【讨论】:

      【解决方案4】:

      您不想使用 Alpine Linux,因为您需要破解它并且它可能会变得不稳定。更多 cmets 见https://stackoverflow.com/a/53291026/4799035

      另见https://github.com/oracle/docker-images/blob/master/OracleInstantClient/dockerfiles/19/Dockerfile,不需要任何登录。

      总之,在 Oracle Linux 7 上:

      yum -y install oracle-release-el7
      yum -y install oracle-instantclient19.3-basic && rm -rf /var/cache/yum
      

      【讨论】:

      • docker pull container-registry.oracle.com/database/instantclient:latest 不工作。请更新。
      • 使用 Dockerfile 并根据您的需要进行自定义。
      猜你喜欢
      • 2015-01-18
      • 2020-03-18
      • 2019-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-27
      • 2019-10-19
      相关资源
      最近更新 更多