首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP7未能在高山码头集装箱上装载memcached和redis

PHP7未能在高山码头集装箱上装载memcached和redis
EN

Stack Overflow用户
提问于 2017-12-01 09:55:52
回答 3查看 4.2K关注 0票数 1

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

我通过PECL安装模块,如下所示:

代码语言:javascript
复制
RUN yes | pecl install \
  igbinary \
  redis-3.1.4 \
  oauth-2.0.2 \
  memcached-3.0.4 \
  mongodb-1.3.3

然后将它们分别添加到php.ini中。

代码语言:javascript
复制
RUN for EXT in \
    igbinary \
    memcached \
    mongodb \
    oauth \
    openssl \
    redis; \
  do \
    echo "extension=${EXT}.so" >> /etc/php7/php.ini; \
  done

大多数模块的安装都是正确的,但是memcachedredis不希望这样做:

代码语言:javascript
复制
# 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

我也从源头上尝试过:

代码语言:javascript
复制
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上使用PHP7.1?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-12-04 01:49:05

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

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

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

apk add php7=7.1.9-r0

为什么要指定确切的版本?一旦我们更新包(例如,使用安全补丁),这将失败,因为只有最新版本的包可以在存储库中使用。我们只将安全修复和错误修复(即补丁版本)支持到稳定的版本中,因此在v3.6或v3.7中不会出现7.2.x。

票数 4
EN

Stack Overflow用户

发布于 2018-02-15 22:24:47

PHP7.2和后续版本基于Alpin3.7,Wich拥有存储库中所有必要的扩展。但是,有PHP7.1和PHP7.0,它们仍然基于3.4,没有任何php7-*扩展。

解决办法是安装pecl,这反过来可以安装所有必要的扩展。

您可以通过这样的方式实现这一点:

代码语言:javascript
复制
RUN apk update\
  && apk upgrade \
  && apk add libmemcached \
    libmemcached-libs \
    libmemcached-dev \
    build-base \
    zlib-dev \
    php5-dev \
    git \
    autoconf \
    cyrus-sasl-dev \
  && pecl config-set php_ini  /usr/local/etc/php/php.ini \
  && pecl install -f memcached \ #Add any Additional packages
  && echo extension=memcached.so >> /usr/local/etc/php/conf.d/docker-php-ext-memcached.ini \
  && rm -rf /tmp/pear \
  && apk del php5-dev \
     build-base \
     zlib-dev \
     php5-dev \
     git \
     autoconf \
     cyrus-sasl-dev

这将使用php5安装PECL,它可以很好地安装7+的扩展。

别忘了包括你的包裹

票数 1
EN

Stack Overflow用户

发布于 2017-12-05 14:06:50

我们也面临着类似的问题,即建立在阿尔卑斯山上的“官方”PHP图片。即。我们不可能在PHP7.1中安装一个工作的ImageMagick版本,该版本是基于高山3.4的

我们所做的是从高山3.6安装,虽然我实际上不会推荐它,但这可能是一个解决办法。

另一个解决方法是等待PHP7.2,它构建在Alpin3.6上。因为您正在构建FROM alpine,而不是FROM php:alpine,所以可以选择寻找一个可以工作的PHP +阿尔卑斯组合。

我只想说:像这样的问题让我们回到Debian图片,因为我们在这上面浪费了大量的时间,包括你提到的奇怪的语言问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47590775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档