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

我通过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

但是,这给了我相同的结果。我已经进行了一些搜索,显然在Alpine(example thread)上可能存在glibc的一些相关问题,但是我不太确定这是同一问题,因为错误输出有些令人困惑。

关于在Alpine Linux上如何安装这些模块以与PHP 7.1配合使用,我有什么要注意的地方吗?

最佳答案

所有这些扩展都可以在Alpine存储库中找到,那么为什么要增加您的生活难度,并直接从PECL安装它们?只需使用apk安装它们。

  • php7-redis
  • php7-oauth
  • php7-memcached
  • php7-mongodb(当前仅在测试存储库中)
  • php7-openssl

  • 请注意,这些软件包位于Alpine v3.7(最新的稳定版本)中,我尚未检查它们是否在较早的版本中也可用。

    这些软件包当然会使用extension=<ext>.so安装配置文件,因此请不要将其手动添加到php.ini中。



    为什么要指定确切版本?一旦我们更新了软件包(例如,使用安全补丁),这将失败,因为存储库中仅提供了最新版本的软件包。我们仅将安全修补程序和错误修正(即补丁程序版本)反向移植到稳定版本中,因此v3.6或v3.7中不会包含7.2.x。

    07-28 13:28
    查看更多