У меня есть Docker-контейнер с PHP-FPM 5.5, и я хотел бы убедиться, что у него есть доступ к Couchbase SDK. У меня это работает за пределами Docker, и я не могу представить, как Docker будет мешать, и все же я, похоже, столкнулся с проблемой, которая, вероятно, связана с Docker:
Мой Docker контейнер работает под Убунту 14.04 и включает в себя следующую установку (после установки PHP):
# Install Couchbase C-library and PECL extension
RUN wget -O/etc/apt/sources.list.d/couchbase.list http://packages.couchbase.com/ubuntu/couchbase-ubuntu1404.list \
&& wget -O- http://packages.couchbase.com/ubuntu/couchbase.key | sudo apt-key add - \
&& apt-get update \
&& apt-get install -y --no-install-recommends pkg-config libcouchbase2-libevent libcouchbase-dev libmemcached-dev php-pear php5-dev make \
&& pecl config-set php_ini /app/conf/php.ini \
&& pecl install couchbase --alldeps \
&& pecl install memcached --alldeps \
&& { \
echo "; Couchbase PHP SDK"; \
echo "extension=/usr/lib/php5/20121212/couchbase.so"; \
} > /etc/php5/fpm/conf.d/30-couchbase.ini \
&& cp /etc/php5/fpm/conf.d/30-couchbase.ini /etc/php5/cli/conf.d \
&& { \
echo "; Memcached PHP SDK"; \
echo "extension=/usr/lib/php5/20121212/memcached.so"; \
} > /etc/php5/fpm/conf.d/30-memcached.ini \
&& cp /etc/php5/fpm/conf.d/30-memcached.ini /etc/php5/cli/conf.d
Это ДОЛЖНО установить как библиотеки C, так и расширения PECL для Couchbase а также Memcached служба поддержки. Во многих отношениях это кажется:
php -m
включает в себя эти модули, как установлено,phpinfo()
отчеты об их конфигурации как таковые:Однако всякий раз, когда я пытаюсь создать экземпляр Couchbase
или же Memcached
класс не может найти класс. Так что, если я запускаю следующую программу:
<?php
$foo = new Couchbase();
$bar = new Memcached();
print_r($foo);
print_r($bar);
?>
это дает мне следующую ошибку:
Неустранимая ошибка PHP: класс ‘Couchbase’ не найден в /app/test.php в строке 2
ОБНОВИТЬ: Оказывается, однако, что в то время как Couchbase не работает, Memcached делает. Не уверен, поможет ли это или повредит устранению неполадок, но Couchbase, кажется, является исключительной проблемой.
Ответ, по-видимому, связан с переходом Couchbase с их 1.x на 2.x SDK, что в случае с PHP означает, что больше нет класса с именем «Couchbase».
Более долгосрочным ответом будет переход на этот новый API; что, похоже, потребует некоторой работы. В ближайшей перспективе, однако, мне нужно решение, которое будет работать для моего существующего использования Couchbase, и это довольно просто … просто установите правильную версию Couchbase:
pecl install couchbase-1.2.2
Это все, что мне было нужно. Вы можете увидеть работающий Docker этой установки по адресу: lifegadget / Докер-PHP
Примечание: версия SDK по умолчанию, которую вы получаете из PECL, теперь 2.0, поэтому, если вы не указываете версию, вы получаете версию 2.x.
Других решений пока нет …