2014-09-30 38 views
0

我有一个运行PHP-FPM 5.5的Docker容器,我想确保它可以访问Couchbase SDK。我有泊坞窗的这方面的工作外,并不能真正图片泊坞窗将如何干涉,但我似乎运行到这是“可能”泊坞窗相关的一个问题:Docker容器中的Couchbase PHP SDK

我泊坞窗容器中运行下的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 

这都应当安装C-库和PECL扩展CouchbaseMemcached的支持。它在许多方面确实出现了:

  • php -m不包括这些模块的安装,
  • 和它们的配置phpinfo()报告,例如:

couchbase

memcached

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

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

它给了我下面的错误:

PHP Fatal error: Class 'Couchbase' not found in /app/test.php on line 2


UPDATE:事实证明,然而,虽然Couchbase 工作,Memcached呢。不知道这是否有助于或伤害故障排除,但Couchbase似乎是唯一的痛点。

+0

任何想尝试这种在码头工人可以在** lifegadget /泊坞窗的PHP找到图像:5.5 ** – ken 2014-09-30 14:34:21

回答

2

看起来,答案似乎与Couchbase从1.x SDK迁移到2.x SDK有关,在PHP的情况下意味着不再有称为“Couchbase”的类。

长期的答案是将迁移到这个新的API;这看起来会需要一些工作。在短期内,但是,我需要一个解决方案,将工作对我现有的使用Couchbase的,这是很简单...只要安装Couchbase的正确版本:

pecl install couchbase-1.2.2 

那是,需要为我的一切。你可以看到在工作这个设置的码头工人:lifegadget/docker-php

Note: the default version of the SDK you get from PECL is now 2.0 so if you're not specifying a version you're getting version 2.x.