如何在Docker中为PHP 5.5添加MySQL/Mysqli扩展?
PHP 5.5 Docker容器中
mysql_connect()函数未定义问题 错误信息
Fatal error: Call to undefined function mysql_connect() in /var/www/html/wp-includes/wp-db.php on line 1568
当前配置文件
docker-compose.yml
version: '3.8' services: php-apache-environment: container_name: php-55-apache build: context: . dockerfile: ./Dockerfile image: php:5.5-apache volumes: - /Websites/wordpress/:/var/www/html/ ports: - 8000:80 - 3306:3306
Dockerfile
FROM php:5.5-apache RUN mkdir -p /usr/src/php/ext/mysql RUN docker-php-ext-install mysql mysqli && docker-php-ext-enable mysql mysqli RUN printf 'log_errors = On\nerror_log = /dev/stderr\n' >> /usr/local/etc/php/conf.d/php.ini RUN a2enmod rewrite RUN service apache2 restart
排查情况
构建输出显示扩展已安装,但进入容器后执行find / -name "*mysql*",仅能找到mysqlnd相关文件,找不到mysql/mysqli扩展的实际模块文件,说明扩展未成功编译安装。
环境
Docker 3.1,macOS
解决方案
修正后的Dockerfile
FROM php:5.5-apache # 安装编译mysql扩展所需的系统依赖 RUN apt-get update && apt-get install -y --no-install-recommends \ libmysqlclient-dev \ && rm -rf /var/lib/apt/lists/* # 移除多余的mkdir命令,docker-php-ext-install会自动处理扩展目录 RUN docker-php-ext-install mysql mysqli RUN printf 'log_errors = On\nerror_log = /dev/stderr\n' >> /usr/local/etc/php/conf.d/php.ini RUN a2enmod rewrite # 移除service apache2 restart,容器启动时apache会自动运行
关键说明
- 补全依赖:PHP的mysql/mysqli扩展编译需要依赖
libmysqlclient-dev,原Dockerfile未安装该依赖,导致扩展编译失败,即便构建日志显示"安装完成",实际也未生成有效模块。 - 移除冗余操作:
mkdir -p /usr/src/php/ext/mysql属于多余操作,docker-php-ext-install脚本会自动从PHP源码中获取扩展编译文件,无需手动创建目录。 - 删除无效重启:Dockerfile中的
service apache2 restart在构建阶段执行,对容器运行时的Apache服务无影响,原基础镜像php:5.5-apache的默认CMD已包含启动Apache的指令。
验证方式
容器启动后,进入容器执行php -m,查看输出中是否包含mysql和mysqli模块;也可在PHP脚本中通过extension_loaded('mysql')和extension_loaded('mysqli')验证扩展加载状态。
内容的提问来源于stack exchange,提问作者Eugene
相关产品推荐
相关产品推荐

