如何在Docker的PHP7 Alpine图像上安装php memcached扩展?

tim*_*fly 8 php memcached pecl docker dockerfile

官方php7 docker镜像有以下示例:

FROM php:7.0-fpm
RUN apt-get update && apt-get install -y libmemcached-dev \
    && pecl install memcached \
    && docker-php-ext-enable memcached
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用FROM php:7.0-fpm-alpine:

RUN apk add --update --no-cache libmemcached-dev
RUN      pecl install memcached && docker-php-ext-enable memcached
Run Code Online (Sandbox Code Playgroud)

PECL给出了这个错误:

pecl/memcached需要PHP(版本> = 5.2.0,版本<= 6.0.0,排除版本:6.0.0),安装版本为7.0.13

如何在alpine上安装memcached php扩展?

Har*_*agg 18

目前php-memcached-dev:php7分支包含此扩展的源代码.

要安装它,您仍然可以使用docker-php-ext-*命令,但您需要自己检查源.

基础安装

假设已经安装了安装扩展所需的一切,您可以:

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

该块将克隆存储库,配置并安装扩展,然后自行清理.

先决条件

您很可能需要安装到包来构建扩展,我们可以通过执行以下操作来添加和删除它们:

ENV MEMCACHED_DEPS zlib-dev libmemcached-dev cyrus-sasl-dev git
RUN set -xe \
    && apk add --no-cache libmemcached-libs zlib \
    && apk add --no-cache \
        --virtual .memcached-deps \
        $MEMCACHED_DEPS \
    && 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 \
    && apk del .memcached-deps
Run Code Online (Sandbox Code Playgroud)

2017年5月17日更新

memcached 现已添加到php7的官方pecl库中(v3 - > php7/7.1,v2 - > php5)

这使得安装有点不同

FROM php:7.0-alpine

ENV MEMCACHED_DEPS zlib-dev libmemcached-dev cyrus-sasl-dev
RUN apk add --no-cache --update libmemcached-libs zlib
RUN set -xe \
    && apk add --no-cache --update --virtual .phpize-deps $PHPIZE_DEPS \
    && apk add --no-cache --update --virtual .memcached-deps $MEMCACHED_DEPS \
    && pecl install memcached \
    && echo "extension=memcached.so" > /usr/local/etc/php/conf.d/20_memcached.ini \
    && rm -rf /usr/share/php7 \
    && rm -rf /tmp/* \
    && apk del .memcached-deps .phpize-deps
Run Code Online (Sandbox Code Playgroud)

  • 问题是libmemcached-dev被添加为虚拟依赖项并在之后被删除.您必须单独添加libmemcached库.所以只需在`set -xe`下面添加`apk add --update libmemcached`即可.@ harry-bragg请更新你的答案.这对我很有帮助 (3认同)

小智 17

尝试一下。

FROM php:7.2.10-fpm-alpine3.7


# Install PHP Extensions (igbinary & memcached)
RUN apk add --no-cache --update libmemcached-libs zlib
RUN set -xe && \
    cd /tmp/ && \
    apk add --no-cache --update --virtual .phpize-deps $PHPIZE_DEPS && \
    apk add --no-cache --update --virtual .memcached-deps zlib-dev libmemcached-dev cyrus-sasl-dev && \
# Install igbinary (memcached's deps)
    pecl install igbinary && \
# Install memcached
    ( \
        pecl install --nobuild memcached && \
        cd "$(pecl config-get temp_dir)/memcached" && \
        phpize && \
        ./configure --enable-memcached-igbinary && \
        make -j$(nproc) && \
        make install && \
        cd /tmp/ \
    ) && \
# Enable PHP extensions
    docker-php-ext-enable igbinary memcached && \
    rm -rf /tmp/* && \
    apk del .memcached-deps .phpize-deps
Run Code Online (Sandbox Code Playgroud)