web-dev-qa-db-ja.com

Apache2およびPHP 5.6:mysqli&pdo拡張機能がインストールされているが有効になっていないDocker

だから私は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"]

すべてが正しいようで、エラーなしでビルドされます。

MysqliとPDOの両方が機能していないことを除いて、それらは有効になっていません。私はそれらを使用できず、php_infoでそれを見ることができません、それらは本当にロードされていません

php_infoは、これらの追加の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

Pdo_mysql.iniとdocker-php-ext-pdo_mysql.iniを確認すると、拡張機能が正しく読み込まれています。それでも、彼らはそこに逃げます

他に何を試すかわからない。何が悪いのですか?

4
diogo.abdalla

コマンドを発行して有効にするだけで、EXPOSE 80実行できるコマンド

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

これにより、有効な拡張コードがphp.iniに追加され、Apache2が再起動されるため、新しい構成が読み込まれます。

1
Martin Barker

実際、私は問題を見つけました:/ var/www/htmlに間違ったphp.iniがあり、正しいものの代わりに読み込まれていました、これはexetension_dirを誤って設定していたため、拡張機能が読み込まれていませんでした

1
diogo.abdalla