PHP7.0-FPM с Docker: невозможно загрузить динамическую библиотеку OCI8

Я создал образ Docker с PHP7.0-FPM и Apache 2.4. Я установил InstantClient 12.2 (базовый + SDK) и установил oci8 следующим образом:

RUN echo "instantclient,/usr/lib/oracle/12.2/instantclient"| pecl install oci8 && \ echo "extension=oci8.so" > /etc/php/7.0/mods-available/oci8.ini && \ ln -s /etc/php/7.0/mods-available/oci8.ini /etc/php/7.0/fpm/conf.d/20-oci8.ini

Я не знаю почему, но я получаю это предупреждение, когда я (повторно) запускаю php7.0-fpm:

# service php7.0-fpm restart * Restarting PHP 7.0 FastCGI Process Manager php-fpm7.0 Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20151012/oci8.so' - libmql1.so: cannot open shared object file: No such file or directory in Unknown on line 0

Расположение oci8.so и libmql1.so выглядит нормально:

# ll /usr/lib/oracle/12.2/instantclient/
total 216700
drwxrwxrwx 3 root www-data      4096 Dec 11 15:12 ./
drwxr-xr-x 4 root www-data      4096 Dec 12 08:24 ../
-rwxrwxrwx 1 root www-data       363 Jan 26  2017 BASIC_README*
-rwxrwxrwx 1 root www-data     44220 Jan 26  2017 adrci*
-rwxrwxrwx 1 root www-data     57272 Jan 26  2017 genezi*
lrwxrwxrwx 1 root www-data        52 Dec 11 15:02 libclntsh.so -> /usr/lib/oracl
e/12.2/instantclient/libclntsh.so.12.1*
-rwxrwxrwx 1 root www-data  71638263 Jan 26  2017 libclntsh.so.12.1*
-rwxrwxrwx 1 root www-data   8033199 Jan 26  2017 libclntshcore.so.12.1*
-rwxrwxrwx 1 root www-data   2981501 Jan 26  2017 libipc1.so*
-rwxrwxrwx 1 root www-data    539065 Jan 26  2017 libmql1.so*
-rwxrwxrwx 1 root www-data   6568149 Jan 26  2017 libnnz12.so*
lrwxrwxrwx 1 root root            50 Dec 11 15:12 libocci.so -> /usr/lib/oracle/
12.2/instantclient/libocci.so.12.1*
-rwxrwxrwx 1 root www-data   2218687 Jan 26  2017 libocci.so.12.1*
-rwxrwxrwx 1 root www-data 124771800 Jan 26  2017 libociei.so*
-rwxrwxrwx 1 root www-data    158543 Jan 26  2017 libocijdbc12.so*
-rwxrwxrwx 1 root www-data    380996 Jan 26  2017 libons.so*
-rwxrwxrwx 1 root www-data    116563 Jan 26  2017 liboramysql12.so*
-rwxrwxrwx 1 root www-data   4036257 Jan 26  2017 ojdbc8.jar*
drwxrwxrwx 5 root www-data      4096 Jan 26  2017 sdk/
-rwxrwxrwx 1 root www-data    240476 Jan 26  2017 uidrvci*
-rwxrwxrwx 1 root www-data     74230 Jan 26  2017 xstreams.jar*

Я добавил к /etc/php/7.0/fpm/pool.d/www.conf эти 4 строки:

env[LD_LIBRARY_PATH] = /usr/lib/oracle/12.2/instantclient env[TNS_ADMIN] = /etc/oracle env[ORACLE_BASE] = /usr/lib/oracle/12.2/instantclient env[ORACLE_HOME] = /usr/lib/oracle/12.2/instantclient

Я бы что-то пропустил?

Спасибо


person M4kn4sh    schedule 12.12.2017    source источник


Ответы (2)


Ничего страшного ! Я пропустил .conf в /etc/ld.so.conf.d/oracle-instantclient.conf

RUN echo "instantclient,/usr/lib/oracle/12.2/instantclient"| pecl install oci8 && \
echo "extension=oci8.so" > /etc/php/7.0/mods-available/oci8.ini && \
ln -s /etc/php/7.0/mods-available/oci8.ini /etc/php/7.0/fpm/conf.d/20-oci8.ini && \
echo /usr/lib/oracle/12.2/instantclient > /etc/ld.so.conf.d/oracle-instantclient.conf && \
ldconfig
person M4kn4sh    schedule 12.12.2017
comment
Это также может быть причиной, поскольку эхо откроет указанный файл, даже если он не существует с пустыми строками, попробуйте с этим с .conf - person sanath meti; 12.12.2017

Попробуйте добавить эту переменную env в /etc/apache2/envvars добавить в конец файла, например

  • экспорт LD_LIBRARY_PATH=/usr/lib/oracle/12.2/instantclient

  • экспортировать TNS_ADMIN=/etc/оракул

  • экспорт ORACLE_BASE=/usr/lib/oracle/12.2/instantclient

  • экспорт ORACLE_HOME=/usr/lib/oracle/12.2/instantclient

Так что пользователь apache будет использовать эту переменную во время выполнения. А также проверьте разрешение пользователя/группы, оно должно быть www-data:www-data

person sanath meti    schedule 12.12.2017
comment
Спасибо за ваш ответ. Я уже сделал, но нет никаких изменений. Кроме того, я думаю, что это php-fpm, а не apache, нет? - person M4kn4sh; 12.12.2017
comment
Не устанавливайте ORACLE_HOME или ORACLE_BASE для Instant Client. Они используются для установки полной базы данных Oracle и полного клиента Oracle. - person Christopher Jones; 14.12.2017