Docker环境配置PHP7.4+Nginx后PDO驱动无法正常加载问题求助
核心原因
你遇到的问题本质是PHP容器没有实际执行Dockerfile里的扩展安装逻辑,从你提供的php -m输出可以看到只有pdo_sqlite,没有pdo_mysql模块,和你Dockerfile里的配置预期不符。
排查方向
- 检查docker-compose配置冲突:你的php服务同时配置了
build和image: php:7.4-fpm字段,若本地已存在官方的php:7.4-fpm镜像,docker-compose默认会直接复用已有镜像,不会走本地Dockerfile构建,导致扩展安装逻辑没有执行。 - 确认镜像来源:执行
docker inspect php | grep Image,查看php容器使用的镜像ID是否和你本地构建的自定义镜像一致,还是对应官方原版镜像。 - 检查扩展安装日志:单独构建php镜像时查看输出,确认是否存在依赖缺失导致pdo_mysql安装失败的情况,官方原版php-fpm镜像默认缺少部分系统依赖,可能导致扩展安装静默失败。
解决方案
- 修改docker-compose.yml的php服务配置,移除和官方镜像重名的image配置,替换为自定义镜像名,避免镜像复用冲突:
php: build: context: . container_name: php image: my-php:7.4-fpm # 替换为自定义镜像名,避免和官方php:7.4-fpm重名 volumes: - ./api:/usr/share/nginx/www
- 完善Dockerfile,提前安装扩展所需的系统依赖,避免安装失败:
FROM php:7.4-fpm # 安装系统依赖 RUN apt-get update && apt-get install -y --no-install-recommends \ default-mysql-client \ libonig-dev \ && rm -rf /var/lib/apt/lists/* # 安装并启用PHP扩展 RUN docker-php-ext-install mysqli pdo pdo_mysql \ && docker-php-ext-enable pdo_mysql
- 强制重新构建镜像并启动服务:
docker-compose up -d --build
- 验证配置生效:进入php容器查看模块是否安装成功:
docker exec -it php php -m | grep pdo
正常输出会包含pdo_mysql,此时站点即可正常识别PDO驱动。
内容的提问来源于stack exchange,提问作者Thrallix
相关产品推荐
相关产品推荐

