今天上午折腾了一上午,终于折腾好了。
常规操作去仔细读 [歪麦博客关于 Docker LNMP环境搭建] (https://www.awaimai.com/2120.html) 这篇文章。仔细读完这篇文字,常规 PHP 够用了。由于我们工作中需要连接 ORACLE 数据库,所以需要修改 Dockerfile 添加 oci8 扩展。先查了 dnmp 项目,发现作者曾在 此 issue 中提到关于 oci8 的安装参考。于是开始了痛苦的尝试之路。

安装步骤

  • 下载 ORACLE Client 套件,我一般喜欢先尝试最新版,下载的 18.3 。下载完成后,放入 extensions 文件夹。
  • 下载 oci8 也放入 extensions 文件夹。
  • 在 install.sh 文件中添加如下代码
# oci8.
if [ "${PHP_OCI8}" != "false" ]; then
    apt-get install -y unzip libaio-dev \
    && unzip instantclient-basic-linux.x64-18.3.0.0.0dbru.zip -d /usr/local/ \
    && unzip instantclient-sdk-linux.x64-18.3.0.0.0dbru.zip -d /usr/local/ \
    && unzip instantclient-sqlplus-linux.x64-18.3.0.0.0dbru.zip -d /usr/local/ \
    && ln -s /usr/local/instantclient_18_3 /usr/local/instantclient \
    && ln -s /usr/local/instantclient/sqlplus /usr/bin/sqlplus \
    && echo 'export LD_LIBRARY_PATH="/usr/local/instantclient"' >> /root/.bashrc \
    && echo 'instantclient,/usr/local/instantclient' \
    && mkdir oci8 \
    && tar -xf oci8-${PHP_OCI8}.tgz -C oci8 --strip-components=1 \
    && ( cd oci8 && phpize && ./configure --with-oci8=shared,instantclient,/usr/local/instantclient && make $mc && make install ) \
    && docker-php-ext-enable oci8
fi
  • 停止并删除当前的 php72 docker stop dnmp_php72_1 && docker rm dnmp_php72_1
  • 重建 php72 docker-compose up -d --no-deps --build php72
  • 进入 dphp72 查看是否安装完成
    完整完成

遇到错误

PHP Warning:  PHP Startup: Unable to load dynamic library 'oci8.so' (tried: /usr/local/lib/php/extensions/no-debug-non-zts-20170718/oci8.so (libmql1.so: cannot open shared object file: No such file or directory), /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: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library 'oci8.so' (tried: /usr/local/lib/php/extensions/no-debug-non-zts-20170718/oci8.so (libmql1.so: cannot open shared object file: No such file or directory), /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: cannot open shared object file: No such file or directory)) in Unknown on line 0

以上错误是为添加环境变量引起的,参考 stockoverflow 解决

切忌面向 Google、stockoverflow 编程,等到处问题的时候解决问题的成本很高。平时一定要做多积累,本次解决问题我原来读 Docker 时写的笔记就给了我小小帮助

参考网站