Couchbase PHP SDK在Docker容器中

我有一个运行PHP-FPM 5.5的Docker容器,我想确保它可以访问Couchbase SDK。 我在Docker之外工作,并不能真正了解Docker如何干预,但我似乎遇到了“可能”与docker相关的问题:

我的Docker容器在Ubuntu 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 

这应该为CouchbaseMemcached支持安装C库和PECL扩展。 在很多方面,它似乎是:

  • php -m确实包含了这些安装的模块,
  • phpinfo()报告他们的configuration如下:

couchbase

memcached的

但是,每当我尝试实例化一个CouchbaseMemcached类都找不到该类。 所以如果我运行下面的程序:

 <?php $foo = new Couchbase(); $bar = new Memcached(); print_r($foo); print_r($bar); ?> 

它给了我以下错误:

PHP致命错误:在第2行的/app/test.php中找不到“Couchbase”类


更新 :然而,事实certificate,虽然Couchbase 不起作用 ,Memcached做。 不知道这是否有帮助或伤害故障排除,但Couchbase似乎是唯一的痛点。

看起来,答案与Couchbase从1.x到2.x SDK有关,在PHP的情况下意味着不再有一个叫“Couchbase”的类。

较长期的答案将是迁移到这个新的API; 这看起来会需要一些工作。 然而,在短期内,我需要一个解决scheme来解决我现有的Couchbase的使用问题,这非常简单…只需安装正确版本的Couchbase:

  pecl install couchbase-1.2.2 

这就是我所需要的。 您可以在lifegadget / docker-php中看到此设置的工作Docker

注意:从PECL获得的SDK的默认版本现在是2.0,所以如果你没有指定版本,你会得到2.x版本。