php - 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;
解决方案
问题是您使用的是 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
推荐阅读
- java - 有没有办法压缩变量赋值?
- javascript - 将具有嵌套数组的数组投影/减少为给定格式
- visual-studio - 即使删除 SessionState 代码,如何摆脱重复出现的 SessionState 错误“NullReferenceException”?
- java - 为什么我的查询找不到我传递的值?
- react-native - 尝试通过终端运行暂存构建时出现 React Native Android 错误
- azure-ad-b2c - AAD B2C 自定义策略继承:可以
永远锁链? - vba - 计数组数整数
- cors - 如何在 gremlin 服务器 janusgraph 中启用 CORS
- java - Java 8 列表包含混合(但与继承相关)类型的泛型
- android - Android Camerax 视频序列化与传输