You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker多虚拟主机环境下PHP容器缺失mysqli扩展求助

解决WordPress缺失mysqli扩展及PHP容器初始化报错问题

问题根源

  1. PHP容器目录被覆盖:你在docker-compose.yml中将本地./php-config挂载到容器内的/usr/local/etc/php,直接覆盖了容器原生的该目录。而docker-php-ext-enable需要在/usr/local/etc/php/conf.d下生成扩展启用配置文件,目录缺失导致初始化报错,mysqli扩展无法正常启用,最终WordPress检测不到该扩展。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 19:07:02