OCI8 не отображается в PHP-FPM7.2 через Docker - PullRequest
0 голосов
/ 07 ноября 2018

Ниже мой Dockerfile. Instantclient, php.ini и другие скопированные файлы находятся в том же контексте, что и Dockerfile.

FROM ubuntu
# Forward request logs to Docker log collector
#RUN ln -sf /dev/stdout /var/log/nginx/access.log && ln -sf /dev/stderr /var/log/nginx/error.log
ENV TZ=America/Denver
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
ENV DEBIAN_FRONTEND noninteractive
ENV DEBIAN_FRONTEND teletype

RUN mkdir -p /etc/php/7.2/fpm
COPY php.ini /etc/php/7.2/fpm/php.ini
COPY php-fpm.conf /etc/php/7.2/fpm/php-fpm.conf

# General image, nginx and php-fpm7.2
RUN apt update
RUN apt-get install -y apt-utils
RUN apt-get install -y gnupg
RUN apt-get install -y curl
RUN apt-get install -y libaio1
RUN apt-get install -y php-pear
RUN apt-get install -y supervisor
RUN pecl config-set php_ini /etc/php/7.2/fpm/php.ini
RUN pear config-set php_ini /etc/php/7.2/fpm/php.ini
RUN mkdir -p /var/log/supervisor
RUN apt-get install -y nginx php7.2-fpm php7.2-bcmath php7.2-bz2 php7.2-curl \
php7.2-dba php7.2-dev php7.2-gd php7.2-imap php7.2-intl php7.2-json php7.2-ldap \
php7.2-mbstring php7.2-mysql php7.2-odbc php7.2-opcache php7.2-pspell \
php7.2-readline php7.2-snmp php7.2-soap php7.2-sqlite3 php7.2-tidy php7.2-xml \
php7.2-xmlrpc php7.2-zip php7.2-cli php-memcached php7.2-common

# Oracle OCI8 php driver install
RUN mkdir -p /opt/oracle
COPY instantclient /opt/oracle/instantclient
RUN cd /opt/oracle/instantclient/ && ln -s libclntsh.so.12.1 libclntsh.so && ln -s libocci.so.12.1 libocci.so
RUN echo /opt/oracle/instantclient > /etc/ld.so.conf.d/oracle-instantclient
RUN cd /opt/oracle/instantclient/ && ldconfig
RUN pecl channel-update pecl.php.net
RUN echo 'instantclient,/opt/oracle/instantclient' | pecl install oci8

# Microsft SQL driver install
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN curl https://packages.microsoft.com/config/ubuntu/18.04/prod.list | tee /etc/apt/sources.list.d/mssql-tools.list
RUN apt update
RUN echo 'y' | ACCEPT_EULA=Y apt-get install mssql-tools
RUN apt-get install unixodbc-dev
RUN pecl install sqlsrv pdo_sqlsrv

EXPOSE 80

STOPSIGNAL SIGTERM

COPY supervisord.conf /etc/supervisor/supervisord.conf

CMD ["/usr/bin/supervisord", "-n"]

Все устанавливается нормально, и все модули отображаются в phpinfo () как настроенный модуль, кроме OCI8. Это вывод, когда он собирает модуль php. Что означает, что он установлен правильно.

Libraries have been installed in:
   /tmp/pear/temp/pear-build-defaultuserAp5K7k/oci8-2.1.8/modules

Build complete.
Don't forget to run 'make test'.

running: make INSTALL_ROOT="/tmp/pear/temp/pear-build-defaultuserAp5K7k/install-oci8-2.1.8" install
Installing shared extensions:     /tmp/pear/temp/pear-build-defaultuserAp5K7k/install-oci8-2.1.8/usr/lib/php/20170718/
running: find "/tmp/pear/temp/pear-build-defaultuserAp5K7k/install-oci8-2.1.8" | xargs ls -dils
557351   4 drwxr-xr-x 3 root root   4096 Nov  6 15:03 /tmp/pear/temp/pear-build-defaultuserAp5K7k/install-oci8-2.1.8
557355   4 drwxr-xr-x 3 root root   4096 Nov  6 15:03 /tmp/pear/temp/pear-build-defaultuserAp5K7k/install-oci8-2.1.8/usr
557356   4 drwxr-xr-x 3 root root   4096 Nov  6 15:03 /tmp/pear/temp/pear-build-defaultuserAp5K7k/install-oci8-2.1.8/usr/lib
557357   4 drwxr-xr-x 3 root root   4096 Nov  6 15:03 /tmp/pear/temp/pear-build-defaultuserAp5K7k/install-oci8-2.1.8/usr/lib/php
557358   4 drwxr-xr-x 2 root root   4096 Nov  6 15:03 /tmp/pear/temp/pear-build-defaultuserAp5K7k/install-oci8-2.1.8/usr/lib/php/20170718
552433 664 -rwxr-xr-x 1 root root 676904 Nov  6 15:03 /tmp/pear/temp/pear-build-defaultuserAp5K7k/install-oci8-2.1.8/usr/lib/php/20170718/oci8.so

Build process completed successfully
Installing '/usr/lib/php/20170718/oci8.so'
install ok: channel://pecl.php.net/oci8-2.1.8
Extension oci8 enabled in php.ini

1 Ответ

0 голосов
/ 15 ноября 2018

Оказывается, вам нужны ДВЕ переменные окружения

RUN echo "LD_LIBRARY_PATH=\"/opt/oracle/instantclient\"" >> /etc/environment \
&& echo "ORACLE_HOME=\"/opt/oracle/instantclient\"" >> /etc/environment
...