php - 高山 linux 上的 Oracle
问题描述
我正在尝试在我的 Alpine Linux Docker 环境中安装 OCI8 扩展。虽然有几个地方说它不起作用,但也有一些地方说它确实有效。我有一个3.4
版本,出于公司原因,它现在保持不变。
我已经在我的 Docker conf 中完成了这项工作:
# Install Oracle Client and build OCI8 (Oracel Command Interface 8 - PHP extension)
USER root
ENV LD_LIBRARY_PATH=/usr/local/instantclient
ENV ORACLE_HOME=/usr/local/instantclient
RUN apk update && apk upgrade
RUN apk add musl-dev libaio autoconf && apk add --update make
## Unzip Instant Client v12
RUN pecl channel-update pecl.php.net
COPY instantclient_12_2.zip /var/www/html/instantclient_12_2.zip
RUN unzip -d /usr/local/ /var/www/html/instantclient_12_2.zip
RUN ln -s /usr/local/instantclient_12_2 /${ORACLE_HOME} && \
ln -s /${ORACLE_HOME}/libclntsh.so.* /${ORACLE_HOME}/libclntsh.so && \
ln -s /${ORACLE_HOME}/libocci.so.* /${ORACLE_HOME}/libocci.so && \
ln -s /${ORACLE_HOME}/lib* /usr/lib && \
ln -s /${ORACLE_HOME}/sqlplus /usr/bin/sqlplus &&\
ln -s /usr/lib/libnsl.so.2.0.0 /usr/lib/libnsl.so.1
RUN apk add gcc; exit 0 # This has a history of failing sometimes
RUN echo "instantclient,/usr/local/instantclient" | pecl install oci8 &&\
echo 'extension=oci8.so' > /usr/local/etc/php/conf.d/30-oci8.ini &&\
rm -rf /tmp/*.zip /var/cache/apk/* /tmp/pear/
现在构建通过了,看起来还不错,但是当我这样做时,php -v
我得到以下信息:
PHP 警告:PHP 启动:无法加载动态库 '/usr/local/lib/php/extensions/no-debug-non-zts-20160303/oci8.so' - 加载共享库 libnsl.so.1 时出错:没有这样的第 0 行 Unknown 中的文件或目录(/usr/local/instantclient/libclntsh.so.12.1 需要)
PHP 版本是7.1.12
.
我尝试过的是这样做apk add libnsl
,但这会返回此错误:
错误:不可满足的约束:so:libtirpc.so.3(缺失):
所以我也尝试添加apk add libtirpc-dev
('plain'libtirpc
不适用于我的版本或其他东西),但这没有改变。
有什么线索吗?
解决方案
我分享了我为使用最新版本的 alpine 和 Instantclient basiclite 制作的 docker 版本。泊坞窗图像的大小为 124 mb。
我分享了我的github,你可以在哪里下载
Docker + alpine + Instantclient Basiclite
或者你可以在下面看到 dockerfile 的内容
FROM alpine:latest
# Install Instantclient Basic Light Oracle and Dependencies
RUN apk --no-cache add libaio libnsl libc6-compat curl && \
cd /tmp && \
curl -o instantclient-basiclite.zip https://download.oracle.com/otn_software/linux/instantclient/instantclient-basiclite-linuxx64.zip -SL && \
unzip instantclient-basiclite.zip && \
mv instantclient*/ /usr/lib/instantclient && \
rm instantclient-basiclite.zip && \
ln -s /usr/lib/instantclient/libclntsh.so.19.1 /usr/lib/libclntsh.so && \
ln -s /usr/lib/instantclient/libocci.so.19.1 /usr/lib/libocci.so && \
ln -s /usr/lib/instantclient/libociicus.so /usr/lib/libociicus.so && \
ln -s /usr/lib/instantclient/libnnz19.so /usr/lib/libnnz19.so && \
ln -s /usr/lib/libnsl.so.2 /usr/lib/libnsl.so.1 && \
ln -s /lib/libc.so.6 /usr/lib/libresolv.so.2 && \
ln -s /lib64/ld-linux-x86-64.so.2 /usr/lib/ld-linux-x86-64.so.2
ENV ORACLE_BASE /usr/lib/instantclient
ENV LD_LIBRARY_PATH /usr/lib/instantclient
ENV TNS_ADMIN /usr/lib/instantclient
ENV ORACLE_HOME /usr/lib/instantclient
推荐阅读
- c++ - enable_shared_from_this什么时候
有用? - python-3.x - 对加工过的织物中的白色簇进行水平计数
- reactjs - 带有嵌套组件的上下文 api
- r - 使用由另一个向量定义的自定义间隔将向量中的值合并
- android - 是否缺少任何代码,当我从显示文档和格式的原始文件夹文件名共享文件时自动更改
- azure-devops - 有没有办法自定义我在 Microsoft Teams 中收到的通知?
- reactjs - 如何有条件地呈现状态属性
- mysql - 使用 auto_incremented 列中的数字作为插入值的 SQL 插入查询
- scala - 使用 Scala 的 HttpPost
- c - 卡在一个奇怪的循环中,没有文件