У меня есть образ Docker для Alpine v3.7, и, короче говоря, я устанавливаю расширение OCI8 для PHP.
При выполнении php -v я получаю следующую ошибку:
PHP Warning: PHP Startup: Unable to load dynamic library 'oci8.so' (tried: /usr/local/lib/php/extensions/no-debug-non-zts-20170718/oci8.so (Error loading shared library libresolv.so.2: No such file or directory (needed by /usr/local/instantclient/libclntsh.so.18.1)), /usr/local/lib/php/extensions/no-debug-non-zts-20170718/oci8.so.so (Error loading shared library /usr/local/lib/php/extensions/no-debug-non-zts-20170718/oci8.so.so: No such file or directory)) in Unknown on line 0
Кажется, я не могу найти, какой пакет мне нужно установить, чтобы эта работа работала. Я видел, что в моей папке libresolv.a есть файл libresolv.so.* (я также искал здесь и увидел, что файла /usr/lib/ в Alpine по умолчанию нет) в моей папке php -v, поэтому я попытался символьно связать его с папкой Oracle, однако это ничего не дает, я по-прежнему получаю ту же ошибку.
Это пакеты, которые я устанавливаю в контейнере Docker:
RUN apk add --update \
autoconf gcc g++ make libaio-dev libnsl gettext-dev automake libtool libc6-compat;
Проблема та же «как мне использовать Alpine с Oracle Client» и ответ тот же «не надо» :)






Проблема в том, что вы используете instaclient 18.
Используя Oracle instaclient 11, вам нужно только добавить
FROM alpine3.11
# Setup LD lib path
ENV LD_LIBRARY_PATH=/usr/local/instantclient_11_2
# Install Apline dependencies
RUN apk add gcc libnsl libaio curl unzip openssl-dev autoconf musl-dev
RUN curl -k -o /tmp/basic.zip https://raw.githubusercontent.com/wilo087/Oracle-Instaclient_11_2/master/instantclient-basic-linux.x64-11.2.0.4.0.zip
# Unzip downloaded library
RUN unzip -d /usr/local/ /tmp/basic.zip
# Link Libs
RUN ln -sf ${LD_LIBRARY_PATH}/libclntsh.so.19.1 ${LD_LIBRARY_PATH}/libclntsh.so; \
ln -s ${ORACLE_HOME}/libocci.so.* ${ORACLE_HOME}/libocci.so; \
# The libnsl version installed by Alpine is the number two, and instaclient use the number 1 so, create symbolic link for number one
RUN ln -sf /usr/lib/libnsl.so.2.0.0 /usr/lib/libnsl.so.1
Проблема в том, что 11g очень, очень и очень старый.
База данных Oracle 11g - это не то же самое, что Instantclient_11. Instantclient_11 работает с последней версией базы данных Oracle (12c), последней версией Cx_Oracle (v7.3) для Python и последней версией Oci8 (v2.x) для PHP.
И он старый! С момента выпуска версии 11g в клиенте было внесено множество исправлений, улучшений функций и новых функций. Последний Instant Client (19c) будет подключаться к 11.2 DB. В целом, как только вам пришлось установить все необходимые пакеты в Alpine, вы должны задаться вопросом, есть ли какое-либо существенное преимущество в размере, которое перевешивает преимущества использования улучшенного стека клиентов и преимущества непрерывности бизнеса поддерживаемая ОС.
Да, вы правы, но это решение, пока проблема зависимости с Libresolv не будет решена.
Версия Alpine отличается, и отсутствующие зависимости отличаются.