Apache与PHP Docker容器中PDO驱动无法正常工作的问题排查
问题分析与解决方案
你的核心问题是同时运行了两套独立的PHP环境,且Apache容器与PHP-FPM容器未建立通信,导致你在独立PHP容器中安装的PDO扩展完全没被Apache使用,以下是具体错误点和修正方案:
错误点拆解
Apache容器自带PHP,与独立PHP-FPM容器冲突
你在Apache的Dockerfile中安装了php php-fpm,这意味着Apache容器自身运行了一套完整的PHP环境,完全没有用到你单独构建的PHP-FPM容器。phpinfo显示的是Apache容器内部PHP的配置,和你在独立PHP容器中安装的PDO毫无关系。Apache容器内的PHP未安装PDO扩展
你仅复制了解除注释的php.ini,但Ubuntu默认的PHP包并未包含pdo_mysql扩展,必须手动安装对应包。Apache与PHP-FPM容器未配置通信
若要使用分离式架构,Apache容器不能自带PHP,需通过proxy_fcgi模块将PHP请求转发到独立的PHP-FPM容器。
方案一:分离式Apache+PHP-FPM架构(推荐)
1. 修正Apache Dockerfile(不安装PHP)
FROM ubuntu:22.04 RUN apt-get update && \ DEBIAN_FRONTEND=noninteractive apt-get install -y apache2 libapache2-mod-fcgid # 启用连接PHP-FPM所需的模块 RUN a2enmod proxy proxy_fcgi CMD ["apache2ctl", "-D", "FOREGROUND"] # 替换默认虚拟主机配置(注意路径修改) COPY apache-vhost.conf /etc/apache2/sites-available/000-default.conf
2. 修改Apache虚拟主机配置(转发PHP请求到PHP-FPM)
<VirtualHost *:80> DocumentRoot /var/www/html <Directory /var/www/html> AllowOverride All Require all granted </Directory> # 将PHP请求转发到php容器的9000端口(容器名直接作为域名) ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://php:9000/var/www/html/$1 </VirtualHost>
3. PHP Dockerfile保留(已正确安装PDO)
FROM php:8.2-fpm RUN docker-php-ext-install mysqli pdo pdo_mysql && docker-php-ext-enable pdo_mysql
4. Docker Compose配置(确保容器通信)
version: "3.9" services: php: build: context: ./php volumes: - ./page:/var/www/html/ apache2: build: context: ./Apache2 ports: - "8082:80" volumes: - ./page:/var/www/html/ # 确保PHP容器先启动 depends_on: - php
方案二:单容器Apache+PHP架构(简化版)
如果不需要分离容器,直接在Apache容器内安装完整PHP环境:
修正Apache Dockerfile
FROM ubuntu:22.04 RUN apt-get update && \ DEBIAN_FRONTEND=noninteractive apt-get install -y apache2 php php-fpm php-pdo-mysql # 启用PHP-FPM模块 RUN a2enmod proxy_fcgi setenvif RUN a2enconf php8.1-fpm CMD ["apache2ctl", "-D", "FOREGROUND"] COPY apache-vhost.conf /etc/apache2/sites-available/000-default.conf COPY php.ini /etc/php/8.1/apache2/php.ini
Docker Compose仅保留Apache服务
version: "3.9" services: apache2: build: context: ./Apache2 ports: - "8082:80" volumes: - ./page:/var/www/html/
内容的提问来源于stack exchange,提问作者d99ss
相关产品推荐
相关产品推荐

