Docker多虚拟主机环境下PHP容器缺失mysqli扩展求助
解决WordPress缺失mysqli扩展及PHP容器初始化报错问题
问题根源
- PHP容器目录被覆盖:你在
docker-compose.yml中将本地./php-config挂载到容器内的/usr/local/etc/php,直接覆盖了容器原生的该目录。而docker-php-ext-enable需要在/usr/local/etc/php/conf.d下生成扩展启用配置文件,目录缺失导致初始化报错,mysqli扩展无法正常启用,最终WordPress检测不到该扩展。 - WordPress路径映射错误:WordPress官方镜像的默认代码目录是
/var/www/html,当前挂载到/var/www/ukiyo-way会导致WordPress自带的PHP环境无法读取代码,同时自定义PHP容器的请求转发逻辑也会受影响。
解决方案
1. 修复PHP容器的挂载配置
有两种方式解决目录缺失问题:
方式一:挂载单个配置文件而非整个目录
修改docker-compose.yml中php服务的挂载项,避免覆盖容器原生的/usr/local/etc/php目录:php: build: . container_name: php volumes: - ./mugen-metrics:/var/www/mugen-metrics/ - ./ukiyo-way:/var/www/ukiyo-way - ./ws-project:/var/www/ws-project - ./php-config/custom.ini:/usr/local/etc/php/conf.d/custom.ini # 挂载单个自定义配置文件 - ./php-logs:/var/log/php networks: - app-network本地
php-config目录下只需放置custom.ini即可,无需覆盖整个PHP配置目录。方式二:提前创建所需子目录
如果必须覆盖整个/usr/local/etc/php目录,先在本地创建对应的子目录:mkdir -p php-config/conf.d这样挂载后容器内会自动存在
/usr/local/etc/php/conf.d目录,docker-php-ext-enable就能正常生成配置文件。
2. 修正WordPress容器的代码挂载路径
WordPress官方镜像默认读取/var/www/html下的代码,调整挂载路径:
wordpress: image: wordpress:latest container_name: wordpress_ukiyo-way environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: exampleuser WORDPRESS_DB_PASSWORD: examplepass WORDPRESS_DB_NAME: exampledb volumes: - ./ukiyo-way:/var/www/html # 改为官方默认目录 depends_on: - db networks: - app-network
同理,wordpress2服务也需要做相同修改:
wordpress2: image: wordpress:latest container_name: wordpress2_ws-project environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: exampleuser2 WORDPRESS_DB_PASSWORD: examplepass2 WORDPRESS_DB_NAME: exampledb2 volumes: - ./ws-project:/var/www/html depends_on: - db networks: - app-network
3. 重新构建并启动服务
执行以下命令更新容器:
# 停止现有服务 docker-compose down # 重新构建PHP镜像 docker-compose build php # 启动所有服务 docker-compose up -d
4. 验证扩展是否启用
进入PHP容器检查mysqli扩展状态:
docker exec -it php php -m | grep mysqli
如果输出mysqli和pdo_mysql,说明扩展已成功启用。
内容的提问来源于stack exchange,提问作者Sergio Sánchez
相关产品推荐
相关产品推荐

