Как установить расширение php-redis, используя официальный подход PHP Docker image?


person starikovs    schedule 12.07.2015    source источник


Ответы (12)


Redis не является расширением, включенным в «php-src», поэтому вы не можете использовать docker-php-ext-install. Используйте PECL:

RUN pecl install -o -f redis \
&&  rm -rf /tmp/pear \
&&  docker-php-ext-enable redis
person TimWolla    schedule 12.07.2015
comment
TimWolla, спасибо, попробую. Итак, мне нужно установить pecl перед всем этим? - person starikovs; 12.07.2015
comment
TimWolla, pecl по умолчанию не включен. - person starikovs; 25.07.2015
comment
Что, если я захочу использовать для Redis другой образ? - person IlGala; 17.12.2019
comment
@IlGala Эта команда устанавливает расширение php для redis, а не сам сервер Redis - person piotrekkr; 20.12.2019
comment
Что делают параметры -o и -f? - person Lars Nyström; 28.05.2020
comment
@ LarsNyström -o --onlyreqdeps: установить все необходимые зависимости, -f --force: перезапишет новые установленные пакеты - person kingjeffrey; 24.12.2020

На мой взгляд, самый простой способ:

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

;)

person Pavel    schedule 10.08.2016
comment
Да, это современный ответ. - person Yarco; 10.05.2017
comment
Работает офигенно !! Спасибо. - person Sivaji; 08.01.2019
comment
Не работает. В частности, docker-php-ext-enable redis НЕ устанавливает никаких файлов конфигурации где-либо. Он просто ничего не делает. - person Szczepan Hołyszewski; 10.04.2020
comment
Выдает ошибку docker-php-ext-enable - not found. Вы можете здесь помочь? - person Sunil Pachlangia; 11.06.2020
comment
Я видел комментарий @ SzczepanHołyszewski и только что выполнил первую команду (RUN pecl install redis), а не обе (RUN pecl install redis && docker-php-ext-enable redis). Это все, что мне было нужно! - person Tyler Collier; 11.03.2021

Я нашел два способа установить расширение php-redis для официального образ Docker для php-fpm. Они здесь:

Первый способ - скомпилировать Redis из исходных кодов и установить.

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 скрипт включен в образ php-fpm и может компилировать расширения и устанавливать их.

Второй способ сделать это - использовать PECL.

Как ТимВолла ответил, вы можете сделать это с помощью PECL, но в моем случае PECL не установлен по умолчанию.

RUN pecl install -o -f redis \
&&  rm -rf /tmp/pear \
&&  echo "extension=redis.so" > /usr/local/etc/php/conf.d/redis.ini
person starikovs    schedule 25.07.2015
comment
Мне пришлось добавить mkdir -p /usr/src/php/ext перед mv. - person Mouagip; 12.09.2019
comment
Я использовал pecl, но мне пришлось добавить RUN apk add --no-cache autoconf git g ++ make из этого ответа: stackoverflow.com/a/44191638 / 4018940 - person TomLi; 23.06.2020

Немного переработанная версия starikovs и skyred отвечает за текущую версию образа докера для PHP 7 (проверено на php:7.0.8-fpm-alpine и php:7.0.8-alpine).

Использует недавно выпущенную версию 3.0 (июнь 2016 г.) для 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
person otherguy    schedule 25.07.2016
comment
Я попробовал ответ от @starikovs, и мне так и не удалось эффективно включить расширение. Этот ответ сработал в первый раз! - person Matthew Setter; 22.06.2018

На основе ответа @starikovs. Я добавил переменную для стиля докера.

# 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
person skyred    schedule 25.08.2015

Если вы хотите использовать redis в качестве обработчика сеанса;

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

Если вы хотите использовать расширение redis с PHP 7 в 2015 году (заимствовано из ответа skyred);

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
person masakielastic    schedule 22.09.2015

Это работает для альпийских изображений:

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

Изменить: добавлен отсутствующий обратный слеш

person grogowar    schedule 29.05.2019

Пробовал несколько способов. На alpine php 7.3.5 мы можем использовать:

RUN apk add --no-cache pcre-dev $PHPIZE_DEPS \
        && pecl install redis \
        && docker-php-ext-enable redis.so
person mihnsen    schedule 25.05.2020
comment
Где установлена ​​переменная $ PHPIZE_DEPS и что в ней должно быть? - person Calamity Jane; 10.06.2021
comment
$ PHPIZE_DEPTS установлен docker alpine. и он использует для сборки расширение pecl, такое как Redis php.net/manual/en /install.pecl.phpize.php - person mihnsen; 11.06.2021

Я использую комбинацию официального скрипта расширения докеров PECL и PHP.

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

Для PHP7 вам нужно дождаться официального релиза redis pecl или использовать 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
person isp_developer    schedule 15.12.2015
comment
Расширение Redis PECL v3 доступно для PHP 7 с 10 июня 2016 года. - person emix; 14.07.2016

Немного переработанная версия starikovs и skyred отвечает за текущую версию образа докера. Протестировано на 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
person selim13    schedule 19.07.2016

В вашем Dockerfile вы можете клонировать репо и установить его с помощью:

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
person azuax    schedule 23.03.2019

Для изображения php: 7.2-fpm-alpine.

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

Возможно, вам потребуется обновить до

apk --update upgrade
person Gabriel Novaes    schedule 29.03.2021