Поддержка memcached требует libmemcached.

Вопрос или проблема

Мы настроили Dockerfile, содержащий следующий фрагмент кода:

ENV MEMCACHE_VERSION=8.0 \
    MEMCACHED_VERSION=3.2.0

############## END ENVIRONMENT VARIABLES ###############
########################################################

RUN apt-get update && apt-get install -y --no-install-recommends \
    zlib1g-dev \
    zlib1g \
    libmemcached11 \
    libmemcachedutil2 \
    libmemcached-dev \
    libmagickwand-dev 

RUN pecl install memcache-$MEMCACHE_VERSION && \
    pecl install memcached-$MEMCACHED_VERSION && \
    pecl install imagick

Но вчера начиная с 17:00 после запуска docker compose up --build -d --force-recreate внезапно начала возникать следующая ошибка. Обратите внимание: этого не происходило до 17:00, весь день все работало нормально.

 => ERROR [builder 3/3] RUN pecl install memcache-8.0 &&     pecl install memcached-3.2.0 &&     pecl install imagick                   15.1s

#0 15.03 checking for libmemcached location... configure: error: memcached support requires libmemcached. Use --with-libmemcached-dir=<DIR> to specify the prefix where libmemcached headers and library are located
#0 15.06 ERROR: `/tmp/pear/temp/memcached/configure --with-php-config=/usr/local/bin/php-config --with-libmemcached-dir=no --with-zlib-dir=no --with-system-fastlz=no --enable-memcached-igbinary=no --enable-memcached-msgpack=no --enable-memcached-json=no --enable-memcached-protocol=no --enable-memcached-sasl=yes --enable-memcached-session=yes' failed
------
failed to solve: process "/bin/sh -c pecl install memcache-$MEMCACHE_VERSION &&     pecl install memcached-$MEMCACHED_VERSION &&     pecl install imagick" did not complete successfully: exit code: 1

Хочу повторить, что мы ничего не меняли в Dockerfile, и это начало происходить и у других коллег, как будто что-то изменилось в модулях libmemcached или memcached вчера примерно в это время.

Что мы уже попробовали:

  • Использование опции перед командами -with-libmemcached-dir=/usr/include/libmemcached
  • Обновление Docker Desktop
  • Установка libmemcached вручную в контейнере Docker и раскомментирование кода установки memcache/memcached/imagick ниже, чтобы проверить, был ли действительно установлен libmemcached. libmemcached был в папке /usr/include/libmemcached. Запуск установки memcached сразу же вызвал ту же ошибку
  • Паника и пристальный взгляд на экран в надежде, что ошибка исчезнет

Какую версию PHP вы используете? У нас была такая же проблема, и она, казалось, была связана с тегом образа Docker php:8.1-fpm.

https://hub.docker.com/layers/library/php/8.1-fpm/images/sha256-4bb4c92e2b4ed0f58997835c29c206f2e9c8f1e3ee29677cf1fd86affda1e99d?context=explore

Этот образ в свою очередь построен на Debian, который несколько дней назад выпустил новую версию (12 – Bookworm, против предыдущей 11 – Bullseye). В версии Bookworm версия libmemcached-dev была обновлена с 1.0.18 до 1.1.4, но по какой-то причине 1.1.4, похоже, не устанавливается правильно, из-за чего pecl не может найти нужный заголовочный файл.

https://packages.debian.org/bullseye/libmemcached-dev
https://packages.debian.org/bookworm/libmemcached-dev

Нам удалось решить проблему сборки, изменив наш тег с php:8.1-fpm на php:8.1-fpm-bullseye, чтобы вернуться к версии Debian Bullseye, где libmemcached-dev 1.0.18 по-прежнему работает нормально.

Если вы хотите использовать Debian Bookworm, я заставил memcached работать, установив также libssl-dev.

RUN apt install -y libmemcached-dev zlib1g-dev libssl-dev

Благодарность AKorezin: https://github.com/php-memcached-dev/php-memcached/issues/541#issuecomment-1624041385

Затем вы можете следовать обычному процессу установки PECL:

RUN yes '' | pecl install -f memcached-3.2.0 \
  && docker-php-ext-enable memcached

Я заставил memcached работать, установив libssl-dev

.

Ответ или решение

Проблема, с которой вы столкнулись при настройке Docker для установки memcached-3.2.0 через PECL, связана с библиотекой libmemcached. Судя по сообщению об ошибке, конфигурация memcached требует наличия libmemcached, но процесс не может найти соответствующие заголовочные файлы и библиотеки. Это часто связано с изменениями в версиях базовых образов Docker или зависимостей.

Прежде всего, отметим несколько ключевых моментов из описания:

  1. Изменение в версии Debian: Образ php:8.1-fpm, используемый вами, основан на Debian, который недавно перешел на версию 12 (Bookworm). Это обновление затронуло версию libmemcached-dev, изменив её на 1.1.4, которая может иметь проблемы с установкой или компиляцией.

  2. Решение для Debian Bullseye: Если у вас нет необходимости использовать последнюю версию Debian, рассмотрите возможность возврата к php:8.1-fpm-bullseye, который использует Debian 11 (Bullseye) с рабочей версией libmemcached-dev 1.0.18. Это может решить вашу проблему без дополнительных изменений в зависимости.

  3. Переход на Debian Bookworm: Если использование Debian Bookworm является обязательным, попробуйте установить дополнительные зависимости. Установка libssl-dev, как показано в несколько упрощенной инструкции, может решить проблему совместимости. Для этого добавьте следующую строку в ваш Dockerfile перед установкой PECL:

    RUN apt install -y libmemcached-dev zlib1g-dev libssl-dev
  4. Использование PECL для установки: После установки зависимостей вы можете продолжить установку memcached-3.2.0 с помощью PECL как обычно, например:

    RUN yes '' | pecl install -f memcached-3.2.0 && docker-php-ext-enable memcached

Теперь давайте подытожим:

  • Оцените необходимость: Если вы не зависите от последней версии Bookworm, просто измените версию Docker image на php:8.1-fpm-bullseye.
  • Проверьте зависимости: При использовании Bookworm установите libssl-dev, это часто решает проблемы с совместимостью библиотеки.
  • Обновите документацию: Убедитесь, что ваша команда в курсе изменений и знает, как решать подобные проблемы в будущем.

Это решение должно помочь в продолжении вашей разработки и развертывании с минимальными затратами времени и ресурсов. Если у вас возникнут дополнительные вопросы или потребуется более глубокое исследование, не стесняйтесь обращаться за поддержкой в сообщество разработчиков или на специализированные форумы.

Оцените материал
Добавить комментарий

Капча загружается...