我正在嘗試在 dockerfile 中為 php:8.1-fpm 映像安裝并啟用 OCI8 到 ..
這是我的 Dockerfile 的一部分:
RUN mkdir /opt/oracle
# Install Oracle Instantclient
RUN wget https://download.oracle.com/otn_software/linux/instantclient/216000/instantclient-basic-linux.x64-21.6.0.0.0dbru.zip \
&& wget https://download.oracle.com/otn_software/linux/instantclient/216000/instantclient-sdk-linux.x64-21.6.0.0.0dbru.zip \
&& wget https://download.oracle.com/otn_software/linux/instantclient/216000/instantclient-sqlplus-linux.x64-21.6.0.0.0dbru.zip \
&& unzip instantclient-basic-linux.x64-21.6.0.0.0dbru.zip -d /opt/oracle \
&& unzip instantclient-sdk-linux.x64-21.6.0.0.0dbru.zip -d /opt/oracle \
&& unzip instantclient-sqlplus-linux.x64-21.6.0.0.0dbru.zip -d /opt/oracle \
&& rm -rf *.zip \
&& mv /opt/oracle/instantclient_21_6 /opt/oracle/instantclient
#add oracle instantclient path to environment
ENV LD_LIBRARY_PATH /opt/oracle/instantclient/
RUN ldconfig
# Install Oracle extensions
RUN docker-php-ext-configure pdo_oci --with-pdo-oci=instantclient,/opt/oracle/instantclient,21.1 \
&& echo 'instantclient,/opt/oracle/instantclient/' | pecl install oci8 \
&& docker-php-ext-install \
pdo_oci \
&& docker-php-ext-enable \
oci8
完整的 dockerfile在這里
docker-compose build: 成功構建并出現此警告:
Warning: PHP Startup: Unable to load dynamic library 'pdo_oci.so' (tried: /usr/local/lib/php/extensions/no-debug-non-zts-20210902/pdo_oci.so (Error loading shared library libaio.so.1: No such file or directory (needed by /usr/local/instantclient_21_6/libclntsh.so.21.1)), /usr/local/lib/php/extensions/no-debug-non-zts-20210902/pdo_oci.so.so (Error loading shared library /usr/local/lib/php/extensions/no-debug-non-zts-20210902/pdo_oci.so.so: No such file or directory)) in Unknown on line 0
當我在安裝完成后使用警告檢查退出的擴展時RUN php -m,我發現沒有安裝 oci8。
那么如何解決呢?
uj5u.com熱心網友回復:
在安裝 PHP 擴展之前,設定系統庫搜索路徑以包含 Instant Client 庫。最好的方法是按照Instant Client 安裝說明ldconfig中的建議使用。在您的情況下,它將是:
RUN echo /usr/local/instantclient_21_6/ > /etc/ld.so.conf.d/oic.conf && \
ldconfig
這也意味著您可以從 step 中洗掉 LD_LIBRARY_PATH RUN LD_LIBRARY_PATH=/usr/local/instantclient_21_6/ php。事實上,整條線都沒有用。
您可能會發現Docker for Oracle Database Applications in Node.js 和 Python 中的一些 Instant Client 技巧很有用。
uj5u.com熱心網友回復:
起初我認為這是一個路徑問題,但真正的錯誤在部分警告訊息中很明顯:
Error loading shared library libaio.so.1: No such file or directory
此命令還顯示了缺少的庫是什么oci8.so:
RUN ldd /usr/local/lib/php/extensions/no-debug-non-zts-20210902/oci8.so
輸出:
linux-vdso.so.1 (0x00007ffe4017a000)
libclntsh.so.21.1 => /opt/oracle/instantclient/libclntsh.so.21.1 (0x00007fd247169000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd246fa0000)
libnnz21.so => /opt/oracle/instantclient/libnnz21.so (0x00007fd24692b000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fd246925000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fd2467e1000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fd2467bf000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fd2467b2000)
libaio.so.1 => not found
libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007fd246798000)
/lib64/ld-linux-x86-64.so.2 (0x00007fd24b57f000)
libclntshcore.so.21.1 => /opt/oracle/instantclient/libclntshcore.so.21.1 (0x00007fd2461e8000)
libaio.so.1 => not found
正如輸出所說:libaio.so.1丟失。
我通過安裝這些軟體包解決了它:
RUN apt-get install libaio1 libaio-dev
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/492063.html
標籤:php 码头工人 ubuntu laravel-9 oci8
