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

Docker环境下PHP容器无法连接MariaDB,如何安装MySQL扩展?

问题分析与解决方案

为什么会出现PHP未安装MySQL扩展的情况?

你用的官方PHP Docker镜像默认是不预装MySQL相关扩展(比如mysqli、pdo_mysql)的——官方镜像为了控制体积,只打包了最基础的PHP组件,数据库扩展这类需要额外安装的功能,得我们手动添加。

两种解决办法,按需选择:

方法1:临时进入PHP容器安装(适合快速测试,容器重启后失效)

首先用docker ps找到你的PHP容器名称或ID,然后执行以下步骤:

如果你的PHP镜像是基于Debian/Ubuntu的(比如php:7.4-fpm、php:8.2-apache这类不带alpine后缀的):
  1. 进入容器终端:
    docker exec -it <你的PHP容器名称/ID> bash
    
  2. 更新软件源并安装依赖:
    apt update && apt install -y libmysqlclient-dev
    
  3. 安装MySQL扩展:
    docker-php-ext-install mysqli pdo_mysql
    

    注:mysqli和pdo_mysql选你需要的就行,一般两个都装更通用

  4. 退出容器,重启PHP容器让扩展生效:
    docker restart <你的PHP容器名称/ID>
    
如果你的PHP镜像是基于Alpine的(比如php:7.4-fpm-alpine,体积更小的版本):
  1. 进入容器终端(Alpine用sh而不是bash):
    docker exec -it <你的PHP容器名称/ID> sh
    
  2. 更新源并安装编译依赖:
    apk update && apk add --no-cache mysql-client mysql-dev gcc g++ make
    
  3. 安装扩展:
    docker-php-ext-install mysqli pdo_mysql
    
  4. 可选:清理编译依赖减小容器体积:
    apk del gcc g++ make mysql-dev && rm -rf /var/cache/apk/*
    
  5. 重启PHP容器:
    docker restart <你的PHP容器名称/ID>
    

方法2:构建自定义PHP镜像(持久化,适合生产环境)

如果不想每次重启容器都重装扩展,最好构建一个包含MySQL扩展的自定义PHP镜像:

  1. 在本地新建一个文件夹,创建Dockerfile文件,内容如下(根据你用的基础镜像选择):
    # 替换成你原来用的PHP镜像,比如php:8.2-apache或php:7.4-fpm
    FROM php:7.4-fpm
    
    # Debian/Ubuntu基础镜像的安装命令
    RUN apt update && apt install -y libmysqlclient-dev \
        && docker-php-ext-install mysqli pdo_mysql \
        && apt clean && rm -rf /var/lib/apt/lists/*
    
    # 如果是Alpine基础镜像,把上面的RUN换成下面这段
    # RUN apk update && apk add --no-cache mysql-client mysql-dev gcc g++ make \
    #     && docker-php-ext-install mysqli pdo_mysql \
    #     && apk del gcc g++ make mysql-dev \
    #     && rm -rf /var/cache/apk/*
    
  2. 进入该文件夹,构建自定义镜像:
    docker build -t my-custom-php .
    
  3. 停止原来的PHP容器,用新构建的镜像重新启动:
    docker stop <原PHP容器名称/ID>
    docker rm <原PHP容器名称/ID>
    # 这里替换成你原来启动PHP容器的命令,把镜像名换成my-custom-php
    docker run -d --name my-php -v /本地www目录:/var/www/html --link 你的MariaDB容器名称:mysql my-custom-php
    

验证是否安装成功

修改你的dbcheck.php,用更准确的检测代码:

<?php
echo "=== PHP MySQL扩展检测 ===<br>";
// 检测mysqli
if (extension_loaded('mysqli')) {
    echo "✅ mysqli 扩展已安装<br>";
} else {
    echo "❌ mysqli 扩展未安装<br>";
}
// 检测pdo_mysql
if (extension_loaded('pdo_mysql')) {
    echo "✅ pdo_mysql 扩展已安装<br>";
} else {
    echo "❌ pdo_mysql 扩展未安装<br>";
}
?>

访问http://localhost/dbcheck.php就能看到结果了。

内容的提问来源于stack exchange,提问作者pdwonline

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:54:14