skip to Main Content

I have this dockerfile for my phpunit container:

FROM php:8.1-fpm-alpine

WORKDIR /var/www/html

RUN apk add --no-cache --repository http://dl-cdn.alpinelinux.org/alpine/edge/community/ --allow-untrusted gnu-libiconv
ENV LD_PRELOAD /usr/lib/preloadable_libiconv.so php

ENV PHP_MEMORY_LIMIT=1G
ENV PHP_UPLOAD_MAX_FILESIZE: 512M
ENV PHP_POST_MAX_SIZE: 512M

RUN docker-php-ext-install pdo

RUN apk add --no-cache libpng libpng-dev && docker-php-ext-install gd && apk del libpng-dev

RUN apk update 
    && apk upgrade 
    && apk add --no-cache 
        freetype 
        libpng 
        libjpeg-turbo 
        freetype-dev 
        libpng-dev 
        jpeg-dev 
        libwebp-dev 
        libjpeg 
        libjpeg-turbo-dev

RUN docker-php-ext-configure gd 
        --with-freetype=/usr/lib/ 
        --with-jpeg=/usr/lib/ 
        --with-webp=/usr

RUN NUMPROC=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || 1) 
    && docker-php-ext-install -j${NUMPROC} gd


RUN apk add --no-cache sqlite-libs
RUN apk add --no-cache icu sqlite git openssh zip
RUN apk add --no-cache --virtual .build-deps icu-dev libxml2-dev sqlite-dev curl-dev
RUN docker-php-ext-install 
        bcmath 
        curl 
        ctype 
        intl 
        pdo 
        pdo_sqlite 
        xml
RUN apk del .build-deps

RUN docker-php-ext-enable pdo_sqlite

RUN apk add php81-pecl-xdebug
RUN docker-php-ext-enable xdebug

And the output is:

Step 19/22 : RUN apk add php81-pecl-xdebug
 ---> Using cache
 ---> 2108d3d7b95d
Step 20/22 : RUN docker-php-ext-enable xdebug
 ---> Running in 443d625bb28d
error: 'xdebug' does not exist

usage: /usr/local/bin/docker-php-ext-enable [options] module-name [module-name ...]
   ie: /usr/local/bin/docker-php-ext-enable gd mysqli
       /usr/local/bin/docker-php-ext-enable pdo pdo_mysql
       /usr/local/bin/docker-php-ext-enable --ini-name 0-apc.ini apcu apc

Possible values for module-name:
bcmath.so ctype.so curl.so gd.so intl.so opcache.so pdo.so pdo_sqlite.so sodium.so xml.so

Some of the above modules are already compiled into PHP; please check
the output of "php -i" to see which modules are already loaded.
ERROR: Service 'phpunit' failed to build: The command '/bin/sh -c docker-php-ext-enable xdebug' returned a non-zero code: 1

What is the problem here? As I see the xdebug package has benne installed successfully and the docker-php-ext-enable xdebug command still not see the xdebug extension.

I checked it with php -i and the xdebug isn’t listed there.

How can I solve this issue?

2

Answers


  1. Chosen as BEST ANSWER

    Thanks for ArmiMousavi & Derick's help here is a working final configuration. I just exploded one liner command to separated RUN to debug build issues.

    FROM php:8.1-fpm-alpine
    
    WORKDIR /var/www/html
    
    RUN apk add --no-cache --repository http://dl-cdn.alpinelinux.org/alpine/edge/community/ --allow-untrusted gnu-libiconv
    ENV LD_PRELOAD /usr/lib/preloadable_libiconv.so php
    
    ENV PHP_MEMORY_LIMIT=1G
    ENV PHP_UPLOAD_MAX_FILESIZE: 512M
    ENV PHP_POST_MAX_SIZE: 512M
    
    RUN docker-php-ext-install pdo
    
    RUN apk add --no-cache libpng libpng-dev && docker-php-ext-install gd && apk del libpng-dev
    
    RUN apk update 
        && apk upgrade 
        && apk add --no-cache 
            freetype 
            libpng 
            libjpeg-turbo 
            freetype-dev 
            libpng-dev 
            jpeg-dev 
            libwebp-dev 
            libjpeg 
            libjpeg-turbo-dev
    
    RUN docker-php-ext-configure gd 
            --with-freetype=/usr/lib/ 
            --with-jpeg=/usr/lib/ 
            --with-webp=/usr
    
    RUN NUMPROC=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || 1) 
        && docker-php-ext-install -j${NUMPROC} gd
    
    
    RUN apk add --no-cache sqlite-libs
    RUN apk add --no-cache icu sqlite git openssh zip
    RUN apk add --no-cache --virtual .build-deps icu-dev libxml2-dev sqlite-dev curl-dev
    RUN docker-php-ext-install 
            bcmath 
            curl 
            ctype 
            intl 
            pdo 
            pdo_sqlite 
            xml
    RUN apk del .build-deps
    
    RUN docker-php-ext-enable pdo_sqlite
    
    # Add xdebug
    RUN apk add --no-cache --virtual .build-deps $PHPIZE_DEPS
    RUN apk add --update linux-headers
    RUN pecl install xdebug-3.1.5
    RUN docker-php-ext-enable xdebug
    RUN apk del -f .build-deps
    
    # Configure Xdebug
    RUN echo "xdebug.start_with_request=yes" >> /usr/local/etc/php/conf.d/xdebug.ini 
        && echo "xdebug.mode=debug" >> /usr/local/etc/php/conf.d/xdebug.ini 
        && echo "xdebug.log=/var/www/html/xdebug/xdebug.log" >> /usr/local/etc/php/conf.d/xdebug.ini 
        && echo "xdebug.discover_client_host=1" >> /usr/local/etc/php/conf.d/xdebug.ini 
        && echo "xdebug.client_port=9000" >> /usr/local/etc/php/conf.d/xdebug.ini
    

  2. try this one and remove :

    RUN apk add php81-pecl-xdebug
    RUN docker-php-ext-enable xdebug
    
    

    and instead replace with:

    RUN apk add --no-cache --virtual .build-deps $PHPIZE_DEPS 
        && pecl install xdebug-3.0.0 
        && docker-php-ext-enable xdebug 
        && apk del -f .build-deps
    

    and then:

    # Configure Xdebug
    RUN echo "xdebug.start_with_request=yes" >> /usr/local/etc/php/conf.d/xdebug.ini 
        && echo "xdebug.mode=debug" >> /usr/local/etc/php/conf.d/xdebug.ini 
        && echo "xdebug.log=/var/www/html/xdebug/xdebug.log" >> /usr/local/etc/php/conf.d/xdebug.ini 
        && echo "xdebug.discover_client_host=1" >> /usr/local/etc/php/conf.d/xdebug.ini 
        && echo "xdebug.client_port=9000" >> /usr/local/etc/php/conf.d/xdebug.ini
    

    and then let me know about the result

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search