带有 apache2 和 PHP 5.6 的 Docker:安装了 mysqli 和 pdo 扩展,但未启用

带有 apache2 和 PHP 5.6 的 Docker:安装了 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,exnstions 已正确加载。但它们仍未出现

不知道还能尝试什么。我做错了什么?

答案1

您可以发出命令来启用它,因此在EXPOSE 80命令之前您可以执行

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

这会将启用扩展代码放入 php.ini 并重新启动 apache2,以便加载新配置

答案2

实际上,我发现了问题所在:/var/www/html 中加载了错误的 php.ini,而不是正确的 php.ini,该文件错误地设置了 exetension_dir,因此没有加载任何扩展

相关内容