Установите PHP7 fpm и memcached с помощью Docker

У меня есть приложение с Docker, и я пытаюсь установить memcached с php7-fpm.

Согласно официальной документации докера, я имею в своем Dockerfile:

# PHP Version
FROM php:7.0-fpm

...

# Install Memcached
RUN apt-get install -y libmemcached-dev && \
pecl install memcached && \
docker-php-ext-enable memcached

Но я получил эту ошибку:

pecl/memcached requires PHP (version >= 5.2.0, version <= 6.0.0, excluded versions: 6.0.0), installed version is 7.0.9

Я не хочу переходить на PHP 5.6. Есть идеи?

2 ответа

Решение

Мы создаем расширение memcache с нуля при сборке нашего php7-контейнера. Может быть, наш подход поможет вам или направит вас в правильном направлении. Документация в Dockerhub действительно кажется неисправной, пробовал pecl, и здесь она тоже не работала.

Вот как это выглядит в нашем Dockerfile:

RUN apt-get update && apt-get install -y \ libmemcached11 \ libmemcachedutil2 \ libmemcached-dev \ libz-dev \ git \ && cd /root \ && git clone -b php7 https://github.com/php-memcached-dev/php-memcached \ && cd php-memcached \ && phpize \ && ./configure \ && make \ && make install \ && cd .. \ && rm -rf php-memcached \ && echo extension=memcached.so >> /usr/local/etc/php/conf.d/memcached.ini \ && apt-get remove -y build-essential libmemcached-dev libz-dev \ && apt-get remove -y \ libmemcached-dev \ libz-dev \ && apt-get autoremove -y \ && rm -rf /var/lib/apt/lists/* \ && apt-get clean

Кажется, что memcached несовместим с php7 и нуждается в другом способе его установки.

После быстрой блокировки в репозитории Laradock, которую я решил, я выкладываю код:

# PHP Version
FROM php:7.0-fpm

# Install the PHP extensions we need
RUN apt-get update && \
apt-get install -y --no-install-recommends \
    curl \
    libmemcached-dev \
    libz-dev \
    libpq-dev \
    libjpeg-dev \
    libpng12-dev \
    libfreetype6-dev \
    libicu-dev \
    libssl-dev \
    libmcrypt-dev && \
    docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr && \
    docker-php-ext-install gd mysqli opcache intl

    .....

 # Install Memcached
RUN curl -L -o /tmp/memcached.tar.gz "https://github.com/php-memcached-   dev/php-memcached/archive/php7.tar.gz" && \
mkdir -p memcached && \
tar -C memcached -zxvf /tmp/memcached.tar.gz --strip 1 && \
( \
    cd memcached && \
    phpize && \
    ./configure && \
    make -j$(nproc) && \
    make install \
) && \
rm -r memcached && \
rm /tmp/memcached.tar.gz && \
docker-php-ext-enable memcached

Еще одно решение

FROM php:7.2-fpm
# ...
# INSTALL memcached
RUN apt-get upgrade -y
RUN apt-get install -y memcached
RUN apt-get install -y libmemcached-dev zlib1g-dev libicu-dev
RUN git clone -b php7 https://github.com/php-memcached-dev/php-memcached 
/usr/src/php/ext/memcached \
&& docker-php-ext-configure /usr/src/php/ext/memcached \
    --disable-memcached-sasl \
&& docker-php-ext-install /usr/src/php/ext/memcached \
&& rm -rf /usr/src/php/ext/memcached
Другие вопросы по тегам