117

I want to build my PHP-FPM image with php-redis extension based on the official PHP Docker image, for example, using this Dockerfile: php:5.6-fpm.

The docs say that I can install extensions this way, installing dependencies for extensions manually:

FROM php:5.6-fpm
# Install modules (iconv, mcrypt and gd extensions)
RUN apt-get update && apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libmcrypt-dev \
        libpng12-dev \
    && docker-php-ext-install iconv mcrypt \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install gd
CMD ["php-fpm"]

Without Docker, I installed it with apt-get install php5-redis. But how can I install it using the approach above?

15 Answers 15

198

Redis is not an extension that is included in “php-src”, therefore you cannot use docker-php-ext-install. Use PECL:

RUN pecl install --onlyreqdeps --force redis \
&& rm -rf /tmp/pear \
&& docker-php-ext-enable redis

On alpine php 7.3.5 we can use:

RUN apk add --no-cache pcre-dev $PHPIZE_DEPS \
&& pecl install redis \
&& docker-php-ext-enable redis.so

Note: The pecl installer accepts default options in these RUN commands. Keep in mind that alternative configuration options are available if needed.

Sign up to request clarification or add additional context in comments.

11 Comments

TimWolla, thanks, I'll try it. So, I need to install pecl as well before all of these?
TimWolla, pecl isn't included by default.
What do the -o and -f options do?
@LarsNyström -o --onlyreqdeps: install all required dependencies, -f --force: will overwrite newer installed packages
"unrecognized option --onlyreqdep", seems there are no such option anymore in PECL comming with "wordpress:6.3-php8.2-apache"
|
82

My opinion, the easiest way is:

RUN pecl install redis && docker-php-ext-enable redis

;)

4 Comments

Yes, it is a modern way answer.
Does NOT work. Specifically docker-php-ext-enable redis does NOT install any configuration files anywhere. It simply does nothing.
Gives me error docker-php-ext-enable -- not found. Can you help here ?
I saw the comment by @SzczepanHołyszewski and just did the first command (RUN pecl install redis), not both (RUN pecl install redis && docker-php-ext-enable redis). That's all that was needed for me!
21

I've found two ways to install php-redis extension for official php-fpm Docker image. Here they are:

The first way is to compile redis from sources and install.

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

docker-php-ext-install script is included in php-fpm image and can compile extensions and install them.

The second way you can do it is with PECL.

As TimWolla answered, you can do it with PECL, but in my case, PECL isn't installed by default.

RUN pecl install -o -f redis \
&&  rm -rf /tmp/pear \
&&  echo "extension=redis.so" > /usr/local/etc/php/conf.d/redis.ini

2 Comments

I had to add a mkdir -p /usr/src/php/ext before the mv.
I used pecl but had to add RUN apk add --no-cache autoconf git g++ make from this answer: stackoverflow.com/a/44191638/4018940
21

Slightly revised version of starikovs and skyred answers for the current PHP 7 version of the docker image (tested on php:7.0.8-fpm-alpine and php:7.0.8-alpine).

Uses the newly released 3.0 version (June 2016) for PHP 7.

ENV PHPREDIS_VERSION 3.0.0

RUN mkdir -p /usr/src/php/ext/redis \
    && curl -L https://github.com/phpredis/phpredis/archive/$PHPREDIS_VERSION.tar.gz | tar xvz -C /usr/src/php/ext/redis --strip 1 \
    && echo 'redis' >> /usr/src/php-available-exts \
    && docker-php-ext-install redis

1 Comment

I tried out the answer from @starikovs and I was never able to effectively enable the extension. This answer worked the first time!
11

Based on @starikovs answer. I added a variable for docker style.

# install phpredis extension
ENV PHPREDIS_VERSION 2.2.7

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

Comments

7

If you want to use redis as session handler;

RUN { \
    echo 'session.save_handler = redis'; \
    echo 'session.save_path = tcp://redis:6379'; \
} >> /usr/local/etc/php/conf.d/docker-php-ext-redis.ini

If you want to use redis extension with PHP 7 in 2015 (borrowed from skyred's answer);

ENV PHPREDIS_VERSION php7

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

Comments

7

Tried few ways. On alpine php 7.3.5 we can use:

RUN apk add --no-cache pcre-dev $PHPIZE_DEPS \
        && pecl install redis \
        && docker-php-ext-enable redis.so

2 Comments

Where is the variable $PHPIZE_DEPS set and what should be in it?
$PHPIZE_DEPTS set by docker alpine. and it use for build pecl extension like Redis php.net/manual/en/install.pecl.phpize.php
6

This works for alpine images:

RUN set -xe \
    && apk add --no-cache --update --virtual .phpize-deps $PHPIZE_DEPS \
    && pecl install -o -f redis  \
    && echo "extension=redis.so" > /usr/local/etc/php/conf.d/redis.ini \
    && rm -rf /usr/share/php \
    && rm -rf /tmp/* \
    && apk del  .phpize-deps

Edit: Added missing backslash

Comments

3

I'm using combination of PECL and PHP official docker extension script

RUN pecl bundle -d /usr/src/php/ext redis \
&& rm /usr/src/php/ext/redis-*.tgz \
&& docker-php-ext-install redis

For PHP7 you need to wait for official redis pecl release or use git:

RUN apt-get update \
&& apt-get install git -y -q \
&& git clone -b php7 https://github.com/phpredis/phpredis.git /usr/src/php/ext/redis \
&& docker-php-ext-install redis

1 Comment

Redis PECL extension v3 is available for PHP 7 since 2016-06-10.
2

This is a docker solution, use this code in Dockerfile.

COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/
RUN install-php-extensions redis

Image sources: https://github.com/mlocati/docker-php-extension-installer

1 Comment

A little more detail on this (e.g. a link to the appropriate github repo) would be good
1

Just RUN apk add --no-cache php83-pecl-redis for me.

Comments

1

I cant install redis from pecl in 2024, now its work > php7.4, i have 7.3 But i cant searching easy way for install, but it is very close

pecl install redis-6.0.2 works for 7.3

Comments

0

Slightly revised version of starikovs and skyred answers for current version of the docker image. Tested on php:5-fpm-alpine

# install phpredis extension
ENV PHPREDIS_VERSION 2.2.8

ADD https://github.com/phpredis/phpredis/archive/$PHPREDIS_VERSION.tar.gz /tmp/redis.tar.gz
RUN tar xzf /tmp/redis.tar.gz -C /tmp \
    && mkdir -p /usr/src/php/ext \
    && mv /tmp/phpredis-$PHPREDIS_VERSION /usr/src/php/ext/redis \
    && echo 'redis' >> /usr/src/php-available-exts \
    && docker-php-ext-install redis \
    && rm -rf /usr/src/php/ext/redis

Comments

0

In your Dockerfile you can clone the repo and install it with:

RUN git clone https://github.com/phpredis/phpredis.git /tmp/phpredis \
&& cd /tmp/phpredis \
&& git checkout -b 3.1.2 \ ## or the release you need #
&& phpize \
&& ./configure \
&& make \
&& make install

Comments

0

For image php:7.2-fpm-alpine.

RUN apk add autoconf gcc g++ make && pecl install redis && docker-php-ext-enable redis

You may need to update before

apk --update upgrade

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.