我正在尝试创建一个基于Alpine的Docker映像,它将运行PHP7.1 (apk add php7=7.1.9-r0),并安装了一些模块(memcached、mongodb、oauth、openssl和redis)。
我通过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大多数模块的安装都是正确的,但是memcached和redis不希望这样做:
# 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上使用PHP7.1?
发布于 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。
发布于 2018-02-15 22:24:47
PHP7.2和后续版本基于Alpin3.7,Wich拥有存储库中所有必要的扩展。但是,有PHP7.1和PHP7.0,它们仍然基于3.4,没有任何php7-*扩展。
解决办法是安装pecl,这反过来可以安装所有必要的扩展。
您可以通过这样的方式实现这一点:
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+的扩展。
别忘了包括你的包裹
发布于 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图片,因为我们在这上面浪费了大量的时间,包括你提到的奇怪的语言问题。
https://stackoverflow.com/questions/47590775
复制相似问题