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
这应该为Couchbase和Memcached支持安装C库和PECL扩展。 在很多方面,它似乎是:
-
php -m
确实包含了这些安装的模块, - 和
phpinfo()
报告他们的configuration如下:
但是,每当我尝试实例化一个Couchbase
或Memcached
类都找不到该类。 所以如果我运行下面的程序:
<?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版本。
- 在Windows上通过命名pipe道访问Docker API
- MySQL泊坞窗图像不能作为本地MySQL服务器
- 如何将Vagrant框转换为Docker镜像
- Dockernetworking(命名空间):如何标记networking包?
- 以Alpine linux为基础图像创buildazure-cli的docker映像时出错
- Webdriverio客户端不会在Docker容器中启动
- 当使用docker run命令时,Docker容器退出(0),但使用docker start命令
- 在supervisord下,使根环境variables可见的最佳实践?
- 通过Docker部署Elixir应用程序到Google Cloud