Devilbox运行Laravel连接PostgreSQL报could not find driver错误
问题原因
- 自定义PHP配置的使用方式错误:Devilbox中
cfg/php-ini-X.X/目录下的自定义配置文件,仅支持修改已安装扩展的运行参数、PHP内存限制、上传大小这类基础配置,无法直接启用未安装的扩展。你在自定义ini中写入的extension=pdo_pgsql、extension=pgsql配置,因为容器内没有对应扩展的二进制文件,完全不会生效,PHP进程加载不到pgsql驱动,就会抛出could not find driver错误。 - 命令执行位置错误:如果你直接在宿主机终端执行
php artisan相关命令,调用的是宿主机本地的PHP环境,即便容器内安装了对应扩展,宿主机PHP没有安装pgsql驱动也会报相同错误。
解决步骤
- 配置PHP容器自动安装pgsql扩展
先停掉当前运行的所有相关容器:
打开Devilbox根目录下的docker-compose down.env配置文件,找到PHP_MODULES_CONFIGURED配置项,将pgsql、pdo_pgsql添加到该配置的扩展列表中。Devilbox会在容器启动时自动编译安装该列表内声明的所有PHP扩展,无需手动写ini配置加载。
你之前在cfg/php-ini-8.1/下创建的自定义ini文件中,手动添加的extension加载配置可以删除,避免扩展安装完成后出现重复加载的警告。- 配置PHP容器自动安装pgsql扩展
- 重建容器让配置生效
执行如下命令强制重建PHP镜像,确保扩展正确安装:
docker-compose up -d httpd bind php pgsql --build --force-recreate- 重建容器让配置生效
- 验证扩展加载状态
启动完成后,执行命令进入PHP容器内部:
在容器内执行命令检查扩展是否正常加载:docker-compose exec php bash
命令正常返回php -m | grep pgsqlpdo_pgsql、pgsql两行结果,即代表扩展安装成功。- 验证扩展加载状态
- 执行迁移命令
在容器内进入项目根目录(默认挂载路径为/shared/httpd/你的项目目录名/htdocs),先清除旧的配置缓存:
再执行迁移安装命令即可正常运行:php artisan config:clear php artisan cache:clearphp artisan migrate:install- 执行迁移命令
*提示:如果不想每次执行artisan命令都进入容器,可以在宿主机配置命令别名,将php、composer命令映射到容器内的对应执行入口,即可直接在宿主机项目目录调用相关命令。
内容的提问来源于stack exchange,提问作者Mr A
相关产品推荐
相关产品推荐

