首页 > 解决方案 > Libresolv 对 Alpine linux 的依赖

问题描述

我有 Alpine v3.7 Docker 映像,简而言之,我正在为 PHP 安装 OCI8 扩展。

执行此操作时php -v出现以下错误:

PHP 警告:PHP 启动:无法加载动态库“oci8.so”(已尝试:/usr/local/lib/php/extensions/no-debug-non-zts-20170718/oci8.so(加载共享库 libresolv.xml 时出错。 so.2:没有这样的文件或目录(/usr/local/instantclient/libclntsh.so.18.1 需要),/usr/local/lib/php/extensions/no-debug-non-zts-20170718/oci8。 so.so(错误加载共享库/usr/local/lib/php/extensions/no-debug-non-zts-20170718/oci8.so.so:没有这样的文件或目录))在第0行的未知

我似乎找不到我必须安装什么包才能使这项工作。我已经看到我的文件夹中有一个文件libresolv.a(我也在这里libresolv.so.*搜索过,发现Alpine中没有默认文件)文件,/usr/lib/所以我尝试将其符号链接回 Oracle 文件夹,但是什么也没做,我仍然得到同样的错误。

这些是我在 Docker 容器创建上安装的包:

RUN apk add --update \
    autoconf gcc g++ make libaio-dev libnsl gettext-dev automake libtool libc6-compat;

标签: phporacledockeralpine

解决方案


问题是您使用的是 instaclient 18。

使用 Oracle instaclient 11,您只需添加

FROM alpine3.11

# Setup LD lib path 
ENV LD_LIBRARY_PATH=/usr/local/instantclient_11_2

# Install Apline dependencies
RUN apk add gcc libnsl libaio curl unzip openssl-dev autoconf musl-dev

RUN curl -k -o /tmp/basic.zip https://raw.githubusercontent.com/wilo087/Oracle-Instaclient_11_2/master/instantclient-basic-linux.x64-11.2.0.4.0.zip

# Unzip downloaded library
RUN unzip -d /usr/local/ /tmp/basic.zip

# Link Libs
RUN ln -sf ${LD_LIBRARY_PATH}/libclntsh.so.19.1 ${LD_LIBRARY_PATH}/libclntsh.so; \
  ln -s ${ORACLE_HOME}/libocci.so.* ${ORACLE_HOME}/libocci.so; \

# The libnsl version installed by Alpine is the number two, and instaclient use the number 1 so, create symbolic link for number one
RUN ln -sf /usr/lib/libnsl.so.2.0.0  /usr/lib/libnsl.so.1

推荐阅读