如何在docker-compose搭建的PHP环境中正常使用mysqli_connect
解决方案
你遇到的问题由两个常见配置错误共同导致:一是官方php:7.4-fpm默认未内置mysqli扩展,临时在运行容器内安装的扩展会在容器重启后失效;二是你当前docker-compose里的php.ini挂载配置错误,导致即使安装了扩展也无法被php加载。
步骤1:编写PHP自定义构建文件
在你的docker-compose.yml同级目录新建Dockerfile-php文件,内容如下:
FROM php:7.4-fpm # 安装mysqli扩展所需依赖 RUN apt-get update && apt-get install -y \ libfreetype6-dev \ libjpeg62-turbo-dev \ libpng-dev \ libonig-dev \ libzip-dev \ && docker-php-ext-install mysqli pdo_mysql \ && docker-php-ext-enable mysqli pdo_mysql
步骤2:修正docker-compose.yml的php服务配置
修改原docker-compose.yml里的php服务段,替换原来的image: php:7.4-fpm为构建配置,同时修正错误的php.ini挂载:
php: build: context: . dockerfile: Dockerfile-php links: - docker-mysql volumes: - ./workspace:/var/www/html/ # 注意:这里要把本地ini配置目录挂载到php的扩展配置目录,不要挂载到php.ini主文件路径 # 如果你不需要自定义php配置,可以直接删除这条挂载 - ./php:/usr/local/etc/php/conf.d/:ro
原配置中
./php:/usr/local/etc/php/php.ini是错误写法:如果本地./php是目录,挂载到文件路径会导致php无法读取正常配置,扩展自然无法加载。如果你的本地./php是单个ini文件,只需要在文件内添加extension=mysqli.so即可。
步骤3:重建容器生效
执行以下命令重建服务,必须加--build参数触发php镜像重新构建:
docker-compose down docker-compose up -d --build
验证生效方式
进入php容器执行命令验证扩展已加载:
docker-compose exec php php -m | grep mysqli
有输出mysqli即代表扩展安装激活成功,再运行你的PHP代码即可正常调用mysqli_connect()。
内容的提问来源于stack exchange,提问作者Felixkruemel
相关产品推荐
相关产品推荐

