5 votos

Docker con apache2 y PHP 5.6: extensión mysqli & pdo instalada, pero no habilitada

Así que estoy tratando de configurar un servidor docker para utilizar con algunas aplicaciones antiguas que no son compatibles con 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"]

Todo parece correcto, se construye sin errores.

Excepto que tanto mysqli como PDO no funcionan, no están habilitados. No puedo usarlos y no puedo verlos en php_info, realmente no se están cargando

php_info dice que está cargando estos inis adicionales:

/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

Comprobando pdo_mysql.ini y docker-php-ext-pdo_mysql.ini, las exsiciones se cargan correctamente. Sin embargo, no están ahí

No sé qué más probar. ¿Qué estoy haciendo mal?

1voto

Martin Barker Puntos 272

Usted puede simplemente emitir un comando para habilitarlo así que justo antes de su EXPOSE 80 comando que puede hacer

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

Esto hará que el código de habilitación de la extensión en el php.ini y reiniciar apache2 por lo que la nueva configuración se carga

1voto

diogo.abdalla Puntos 116

En realidad, he encontrado el problema: había un php.ini erróneo en /var/www/html que se estaba cargando en lugar del correcto, este estaba configurando el exetension_dir de forma errónea y por eso no se cargaban las extensiones

0 votos

Gracias por hacer esta pregunta. Yo también me encuentro con el mismo problema. ¿podrías compartir tus configuraciones de archivos docker actualizadas? Gracias

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: