Php: No preferable way to install custom extension that is not mentioned in default list.

Created on 26 Mar 2015  路  25Comments  路  Source: docker-library/php

1st problem: docker-php-ext-* does not provide a way to install extension package from pecl (for example i need to install ext-mongo which cause me to make some tricks with Dockerfile to succeed)
2nd problem: custom source extensions (e.g. phalcon) that has to be compiled from scratch and exposed to runnin php daemon (fpm, apache).

Is there any instructions to make it right and simple? For any of cases.

Thanks.

Most helpful comment

Add in your Dockerfile

# Enable and configure xdebug
RUN pecl install xdebug
RUN docker-php-ext-enable xdebug

Reference: http://stackoverflow.com/questions/30594804/

All 25 comments

+1 got the same problem installing xdebug.
I ended up installing git via apt-get and clone xdebug repos into /usr/src/php/ext/ and then use docker-php-ext-install xdebug.
Worked like a charm.

While we could add a docker-php-pecl-* type script, it wouldn't save you any effort. It's still a simple one liner in your Dockerfile to do it currently.

Installing php-redis and xdebug:

RUN pecl install -o -f redis xdebug \
    && rm -rf /tmp/pear \
    && echo "extension=redis.so" > /usr/local/etc/php/conf.d/redis.ini \
    && echo "zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20121212/xdebug.so" > /usr/local/etc/php/conf.d/xdebug.ini \

If we did make a script, it really would just automate the last portion of my paste above.

thanks.
the issue could be closed?
or we could really make the issue as one_line_install_specific_extension_from_pecl_script job?

@jaredm4 it might not save much effort, but it would simplify things for users expecting a consistent interface for installing extensions.

To install xdebug from source, I used this (found this issue later)

curl "http://xdebug.org/files/xdebug-2.3.3.tgz" -o xdebug.tar.gz
cd xdebug-2.3.3
phpize
./configure --enable-xdebug --with-php-config=/usr/local/bin/php-config
echo 'zend_extension="/usr/local/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so"' > /usr/local/etc/php/conf.d/xdebug.ini

@jaredm4, thanks for your answer. I'm looking for a way of installing php-redis and I have a few questions. Do I need to install any dependencies before installing redis that way (I use FROM php:fpm)? and do I need to install pecl or it's already included? Thanks.

As mentioned on #115, I use my own docker-php-pecl-install script.

I like the reduced boilerplate:

FROM php:5.6-fpm
COPY docker-php-pecl-install /usr/local/bin/
RUN docker-php-pecl-install xdebug-2.3.3 uploadprogress-1.0.3.1 redis-2.2.5

@lazycommit did you install mongo successfully?

RUN pecl install mongo
ADD mongo.ini /usr/local/etc/php/conf.d/

mongo.ini:

extension=mongo.so

Doesn't work for me on php:5.6-fpm

Need a docker-php-pecl-install script.
The example have "magic" constant like "no-debug-non-zts-20121212". Would be great if the installer script can handle that without hardcoding.

@j16sdiz have you tried mine?

BTW, I installed php-redis extension this way:

RUN curl -L -o /tmp/redis.tar.gz https://github.com/phpredis/phpredis/archive/2.2.7.tar.gz \
    && tar xfz /tmp/redis.tar.gz \
    && rm -r /tmp/redis.tar.gz \
    && mv phpredis-2.2.7 /usr/src/php/ext/redis \
    && docker-php-ext-install redis

I think any other php extension can be installed the same way and without PECL which I don't have by default in ubuntu.

Details is here http://stackoverflow.com/a/31623759/202550

Failed loading /usr/local/lib/php/extensions/no-debug-non-zts-20121212/xdebug.so:  /usr/local/lib/php/extensions/no-debug-non-zts-20121212/xdebug.so: cannot open shared object file: No such file or directory

@ephrin please add that one_line_install_specific_extension_from_pecl_script :)

Got the same error when I tried this. You finally nailed it @rainbow-alex ? If so: got any hint on how to fix this?

@roelvanduijnhoven @rainbow-alex More than likely, the folder name changed. Go to /usr/local/lib/php/extensions/ after installing xdebug, take note of the new folder name containing xdebug, and install it like I pasted above (without that custom script).

Thanks. That solved it.

@rainbow-alex If you install xdebug directly on the container it will tell what the filename is. Thus docker run pecl install -o -f xdebug will yield the correct path on the console.

Granted, not a good solution as it prevents the Dockerfile from being portable. A pecl install script would be nice, that could determine that path when installing and prevent that issue.

@rainbow-alex not topical anymore. Pecl installs normally and existent scripts are good as is to enable an extension.
For more diving into the issue (and some mixin of extension installation flags issue) there are two variants of feature todos:
a) implement some script (interceptor) for pecl to be able to pass config flags for its prompt;
or (as the replacement of ugly a.:)
b) use pecl or natively make a download of extension to be able to pass flags to ./configure by docker-php-ext-* scripts as already provided.

**For inspiration look into phpbrew :)

Add in your Dockerfile

# Enable and configure xdebug
RUN pecl install xdebug
RUN docker-php-ext-enable xdebug

Reference: http://stackoverflow.com/questions/30594804/

This doesn't work with php:7.0.1-apache:

RUN pecl install xdebug && \
         docker-php-ext-enable xdebug

I think that xdebug is in some kind of beta right now for PHP7. Correct?

Looks like it still is just a release candidate:

[2015-12-12] - Xdebug 2.4.0RC3 is out!

This is the third release candidate of the 2.4 series. The 2.4 series adds support for PHP 7
http://xdebug.org/

'''
RUN pecl install xdebug-beta && \
docker-php-ext-enable xdebug
'''

thank you @ekandreas :+1:

This works great, thanks @luiscoms

# Enable and configure xdebug
RUN pecl install xdebug
RUN docker-php-ext-enable xdebug

Thanks for all the discussion and useful information! I'm closing since there's nothing to change in the image (given that the existing scripts handle this reasonably well), but this thread should serve as a useful reference for folks looking for help doing this kind of thing in the future. :+1:

I have a project using old mongo extension which is deprecated . Unable to install by pecl. Got a error message "No releases for package "pecl/mongo" exist" when I tried to install mongo extension by running
pecl install mongo
I end up install mongo extension manually. Below is work for me.
RUN apt-get update \
&& apt-get -y install libssl-dev \
&& curl -L -o /tmp/mongo.tar.gz https://github.com/mongodb/mongo-php-driver-legacy/archive/1.6.14.tar.gz \
&& tar xfz /tmp/mongo.tar.gz -C /tmp/ \
&& mkdir -p /usr/src/php/ext/mongo \
&& mv /tmp/mongo-php-driver-legacy-1.6.14/* /usr/src/php/ext/mongo \
&& rm -r /tmp/mongo.tar.gz /tmp/mongo-php-driver-legacy-1.6.14 \
&& cd /usr/src/php/ext/mongo \
&& phpize \
&& ./configure \
&& make all \
&& docker-php-ext-install mongo\
&& docker-php-ext-enable mongo\

Was this page helpful?
0 / 5 - 0 ratings

Related issues

ihorsamusenko picture ihorsamusenko  路  4Comments

ktrzos picture ktrzos  路  3Comments

mbates picture mbates  路  3Comments

mcnesium picture mcnesium  路  3Comments

sanjay-rakholiya picture sanjay-rakholiya  路  3Comments