我们配置了一个包含以下代码片段的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 进行任何更改,并且这种情况开始发生在我的其他同事的 docker 环境中,并且好像从昨天这个时候 libmemcached 或 memcached 模块中发生了一些变化。
我们已经尝试过的:
- 使用命令后面的选项
-with-libmemcached-dir=/usr/include/libmemcached
- 更新 Docker Desktop
- 在 docker 容器上手动安装 libmemcached,并取消注释下面的 memcache/memcached/imagick 安装代码,以查看 libmemcached 是否是真正的安装程序。libmemcached 存在于文件夹 /usr/include/libmemcached 中。之后立即运行 memcached 安装会导致同样的错误
- 惊慌失措地盯着屏幕,希望它会消失
答案1
您使用的是哪个版本的 PHP?我们自己也遇到了这个问题,它似乎与 Docker 镜像标签有关php:8.1-fpm
。
此映像是基于 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 继续正常工作。
答案2
如果您希望使用 Debian Bookworm,我libssl-dev
也可以通过安装让 memcached 运行。
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