PHP7无法加载Alpine Docker容器上的memcached和redis

我正在尝试创build一个基于Alpine Linux的Docker镜像,它将安装一些模块( memcachedmongodboauthopensslredis )来运行PHP 7.1( apk add php7=7.1.9-r0 )。

我通过PECL像这样安装模块:

 RUN yes | pecl install \ igbinary \ redis-3.1.4 \ oauth-2.0.2 \ memcached-3.0.4 \ mongodb-1.3.3 

然后将它们中的每一个添加到php.ini

 RUN for EXT in \ igbinary \ memcached \ mongodb \ oauth \ openssl \ redis; \ do \ echo "extension=${EXT}.so" >> /etc/php7/php.ini; \ done 

大多数模块安装正确,但memcachedredis不想玩:

 # php -v PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php7/modules/memcached.so' - Error relocating /usr/lib/php7/modules/memcached.so: php_session_create_id: symbol not found in Unknown on line 0 PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php7/modules/redis.so' - Error relocating /usr/lib/php7/modules/redis.so: php_session_register_module: symbol not found in Unknown on line 0 PHP Warning: Module 'openssl' already loaded in Unknown on line 0 PHP Warning: Cannot load module 'mongodb' because required module 'json' is not loaded in Unknown on line 0 PHP 7.1.9 (cli) (built: Oct 2 2017 20:51:54) ( NTS ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies 

我也尝试从源代码:

 RUN git clone https://github.com/php-memcached-dev/php-memcached RUN cd php-memcached \ && git checkout php7 \ && git pull \ && /usr/bin/phpize \ && ./configure --with-php-config=/usr/bin/php-config \ && make \ && make install 

然而这给了我相同的结果。 我已经做了一些search,显然可能有一些关于Alpine的glibc相关问题( 例如线程 ),但我不太确定这是相同的问题,因为错误输出有点混乱。

有什么我可以忽略这些模块应该如何安装在Alpine Linux上使用PHP 7.1?

所有这些扩展都可以在Alpine存储库中使用,那么为什么要让你的生活变得更加困难并直接从PECL安装? 只需使用apk安装它们。

  • PHP7,Redis的
  • PHP7-的OAuth
  • PHP7-memcached的
  • php7-mongodb (目前只在testing版本库中)
  • PHP7-的OpenSSL

请注意,这些软件包在Alpine v3.7(最新的稳定版本)中,我还没有检查它们是否在旧版本中也可用。

这些软件包当然会安装extension=<ext>.soconfiguration文件,所以不要手动添加到php.ini


apk add php7=7.1.9-r0

为什么你指定确切的版本? 一旦我们更新了软件包(例如安全补丁),这将会失败,因为在软件仓库中只有最新版本的软件包可用。 我们仅将安全修复程序和错误修正(即修补程序版本)恢复到稳定版本,因此在v3.6或v3.7中不会有7.2.x。

我们正面临类似的问题,在阿尔卑斯山上build立的“官方”PHP图像。 IE浏览器。 我们不可能在基于Alpine 3.4的PHP 7.1中安装一个可用的ImageMagick版本

我们所做的是从Alpine 3.6安装 ,而我实际上不会推荐这可能是一个解决方法。

另一个解决方法是等待build立在Alpine 3.6上的PHP 7.2。 可能是一个选项来寻找一个有效的PHP +阿尔卑斯组合,因为你正在build设FROM alpine而不是FROM php:alpine

只是说:像这样的问题使我们回到Debian的形象,因为我们已经浪费了大量的时间,包括像你提到的奇怪的glibc问题。