Docker z apache2 i PHP 5.6: rozszerzenie mysqli i pdo jest zainstalowane, ale nie włączone

4

Próbuję więc skonfigurować serwer dokujący do użycia ze starymi aplikacjami, które nie są kompatybilne z PHP 7

FROM php:5.6-apache

RUN apt-get -y update && apt-get upgrade -y

# Install tools && libraries
RUN apt-get -y install --fix-missing apt-utils nano wget dialog \
    build-essential git curl libcurl3 libcurl3-dev zip \
    libmcrypt-dev libsqlite3-dev libsqlite3-0 mysql-client \
    zlib1g-dev libicu-dev libfreetype6-dev libjpeg62-turbo-dev libpng-dev \
    && rm -rf /var/lib/apt/lists/*

# Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# PHP5 Extensions
RUN docker-php-ext-install curl \
    && docker-php-ext-install tokenizer \
    && docker-php-ext-install json \
    && docker-php-ext-install mcrypt \
    && docker-php-ext-install pdo_mysql \
    && docker-php-ext-install pdo_sqlite \
    && docker-php-ext-install mysqli \
    && docker-php-ext-install zip \
    && docker-php-ext-install -j$(nproc) intl \
    && docker-php-ext-install mbstring \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd \
    && pecl install xdebug-2.5.5 && docker-php-ext-enable xdebug \
    && echo "xdebug.remote_enable=1" >> /usr/local/etc/php/php.ini

# Enable apache modules
RUN a2enmod rewrite headers

EXPOSE 80

ENTRYPOINT ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

Wszystko wydaje się słuszne, buduje się bez błędów.

Tyle, że zarówno mysqli, jak i PDO nie działają, nie są włączone. Nie mogę ich użyć i nie widzę wtedy na php_info, naprawdę nie są ładowane

php_info mówi, że ładuje te dodatkowe inis:

/usr/local/etc/php/conf.d/docker-php-ext-gd.ini, /usr/local/etc/php/conf.d/docker-php-ext-intl.ini, /usr/local/etc/php/conf.d/docker-php-ext-mcrypt.ini, /usr/local/etc/php/conf.d/docker-php-ext-mysqli.ini, /usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini, /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini, /usr/local/etc/php/conf.d/docker-php-ext-zip.ini

Sprawdzając pdo_mysql.ini i docker-php-ext-pdo_mysql.ini, exnstions są ładowane poprawnie. Mimo to ich tam nie ma

Nie wiem, co jeszcze spróbować. Co ja robię źle?

diogo.abdalla
źródło

Odpowiedzi:

1

Możesz po prostu wydać polecenie, aby je włączyć, więc tuż przed twoim EXPOSE 80poleceniem możesz to zrobić

RUN echo "extension=pdo_mysql" >> /usr/local/etc/php/php.ini \
 && service apache2 restart

Spowoduje to skasowanie kodu rozszerzenia włączania do php.ini i zrestartowanie apache2, aby nowa konfiguracja została załadowana

Martin Barker
źródło
1

Właściwie to znalazłem problem: w / var / www / html ładowałem niewłaściwy php.ini, który był ładowany zamiast właściwego, ten ustawiał niepoprawnie katalog exetension_dir, więc żadne rozszerzenia nie były ładowane

diogo.abdalla
źródło