memcached 支持需要 libmemcached

IT-*_*irl 4 memcached docker

我们配置了一个包含以下代码片段的 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
Run Code Online (Sandbox Code Playgroud)

但是昨天从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
Run Code Online (Sandbox Code Playgroud)
#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
Run Code Online (Sandbox Code Playgroud)

我想重复一遍,我们没有更改 Dockerfile 中的任何内容,并且从昨天这个时间起,我的其他同事 docker 环境以及 libmemcached 或 memcached 模块中是否发生了某些变化,这种情况开始发生。

我们已经尝试过的:

  • 使用命令后面的选项-with-libmemcached-dir=/usr/include/libmemcached
  • 更新 Docker 桌面
  • 在 docker 容器上手动安装 libmemcached 并取消注释下面的 memcache/memcached/imagick 安装代码,以查看 libmemcached 是否是真正的安装程序。libmemcached 存在于文件夹 /usr/include/libmemcached 中。立即运行 memcached 安装会导致相同的错误
  • 吓坏了,盯着屏幕希望它会消失

小智 10

如果你想使用 Debian Bookworm,我libssl-dev也通过安装让 memcached 工作。

RUN apt install -y libmemcached-dev zlib1g-dev libssl-dev
Run Code Online (Sandbox Code Playgroud)

感谢 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
Run Code Online (Sandbox Code Playgroud)


小智 8

您使用什么版本的 PHP?我们自己也遇到了这个问题,它似乎与 Docker 镜像标签有关php:8.1-fpm

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

该镜像又是在 Debian 上构建的,就在几天前,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返回 Bullseye Debian 版本来解决构建问题,其中 libmemcached-dev 1.0.18 继续正常工作。