使用Docker容器部署MySQL与PHP时遇mysqli类未找到错误求助
解决Docker部署中mysqli类不存在的问题
问题根源
你的docker-compose.yml里,php-apache服务直接使用了官方的php:8.0-apache镜像,而非你通过Dockerfile构建的、已安装mysqli扩展的自定义镜像,导致代码运行时找不到mysqli类。
修复步骤
1. 调整docker-compose配置
需要让php-apache服务使用你构建的带mysqli扩展的镜像,有两种实现方式:
方式一:在compose中直接关联Dockerfile构建
修改后的docker-compose.yml:
version: '3.6' services: php-apache-environment: container_name: php-apache # 替换原image配置,指定Dockerfile所在目录(当前目录用.) build: . volumes: - ./php/src:/var/www/html/ ports: - 8000:80 db: container_name: db image: mysql restart: always environment: MYSQL_ROOT_PASSWORD: MYSQL_ROOT_PASSWORD MYSQL_DATABASE: MY_DATABASE MYSQL_USER: MYSQL_USER MYSQL_PASSWORD: MYSQL_PASSWORD ports: - "9906:3306"
方式二:先手动构建自定义镜像
先执行构建命令生成带mysqli的镜像:
docker build -t php-8.0-apache-mysqli .
再修改docker-compose.yml里的image为自定义镜像名:
version: '3.6' services: php-apache-environment: container_name: php-apache image: php-8.0-apache-mysqli volumes: - ./php/src:/var/www/html/ ports: - 8000:80 # db服务配置保持不变
2. 重新启动容器
执行命令更新容器:
# 停止并清理原有容器 docker-compose down # 启动并构建镜像(方式一需加--build,方式二直接up即可) docker-compose up --build
验证扩展状态
进入php-apache容器,检查mysqli是否已安装:
docker exec -it php-apache php -m
输出的扩展列表中应该能看到mysqli。
内容的提问来源于stack exchange,提问作者Cheviwa
相关产品推荐
相关产品推荐

