【问题标题】:Install PHP7 fpm and memcached with Docker使用 Docker 安装 PHP7 fpm 和 memcached
【发布时间】:2016-09-06 08:08:50
【问题描述】:

我有一个带有 Docker 的应用程序,我正在尝试使用 php7-fpm 安装 memcached。

根据official docker documentation,我的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。有什么想法吗?

【问题讨论】:

  • fwiw,截至 2019 年 3 月 15 日,上述 dockerfile 部分现在可以工作/受支持,应该添加 memcached。

标签: docker memcached docker-compose dockerfile libmemcached


【解决方案1】:

在构建 php7 容器时,我们从头开始构建 memcache 扩展。也许我们的接洽会帮助您或为您指明正确的方向。 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

【讨论】:

  • /root/php-memcached/php_memcached.c:在函数“zim_Memcached___construct”中:/root/php-memcached/php_memcached.c:1282:20:错误:需要左值作为赋值 GC_REFCOUNT 的左操作数(&le) = 1; ^ make: *** [Makefile:192: php_memcached.lo] 错误 1
【解决方案2】:

memcached好像和php7不兼容,需要另一种方式安装。

Laradock repo快速锁定后我以这种方式解决了,我贴出代码:

# 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

【讨论】:

    【解决方案3】:

    另一种解决方案

    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
    

    【讨论】:

      猜你喜欢
      • 2018-01-25
      • 1970-01-01
      • 1970-01-01
      • 2019-02-02
      • 1970-01-01
      • 2017-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多