Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Docker - install php-memcached extension not working?

I have been trying to install memcached in my php-5.6 container, however I am unable to get it working, as i don't see memcached extension in phpinfo() and plus for some reason it's complaining about that it can't find the memcache.so in the code.

there is my docker-file for php build

FROM php:5.6-fpm
RUN apt-get update && apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libmcrypt-dev \
        libpng12-dev \
    && docker-php-ext-install -j$(nproc) iconv mcrypt \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd     

RUN docker-php-ext-install mysqli mbstring pdo_mysql 

# Download and Installing php libraries 
RUN apt-get install -y memcached
RUN apt-get -y install php-pear php5-dev php5-memcached geoip-bin geoip-database libgeoip-dev php5-geoip

# Download and Installing php libraries 
RUN pecl install geoip

# Download and Installing git and vim 
RUN apt-get -y install git gcc  

RUN pwd
RUN git clone --depth=1 git://github.com/phalcon/cphalcon.git 
WORKDIR /var/www/html/cphalcon/build
RUN ./install

EXPOSE 9000
EXPOSE 11211

COPY ./php-fpm.d/www.conf /etc/php-fpm.d/www.conf
COPY ./php.ini  /usr/local/etc/php/php.ini 
COPY ./php-fpm.conf /etc/php-fpm.conf
COPY ./phalcon.ini /usr/local/etc/php/conf.d/phalcon.ini
COPY ./geoip.ini /usr/local/etc/php/conf.d/geoip.ini
COPY ./memcached.ini /usr/local/etc/php/conf.d/memcached.ini

And my docker compose file is

nginx:
    build: ./.config/etc/nginx/
    ports:
        - 7000:80
    links:
        - php
        - memcached:memcached            
    volumes_from:
        - app

memcached:
  image: memcached:latest   

php:
    build: ./.config/etc/php/
    expose:
        - 9000
    links:
        - mysql
        - memcached:memcached            
    volumes_from:
        - app

app:
    image: php:5.6-fpm
    #image: php:7.0-fpm
    volumes:
        - ./:/var/www/vhosts/example.com/httpdocs
    command: "true"

The error i am getting on the code is

[36;1mnginx_1 | [0mPHP message: PHP Fatal error: Class 'memcache' not found in Unknown on line 0" while reading response header from upstream, client: 192.168.99.1, server: www.example.dev, request: "GET /search HTTP/1.1", upstream: "fastcgi://172.17.0.5:9000", host: "192.168.99.100:7000"

What is going wrong here?

like image 368
mahen3d Avatar asked Dec 08 '22 22:12

mahen3d


1 Answers

The php images ship a custom-compiled PHP, but are based on a Debian Jessie image (and use Debian's repositories). With apt-get install php5-memcached, you install the memcached extension for the distribution's PHP package (which is installed along the way).

You need to install the memcached extension via PECL (and its build dependencies via APT):

RUN apt-get update
RUN apt-get install -y libz-dev libmemcached-dev && \
    pecl install memcached && \
    docker-php-ext-enable memcached
like image 51
helmbert Avatar answered Dec 10 '22 12:12

helmbert