Docker环境下Frankenphp+Laravel连接PostgreSQL提示找不到驱动
问题排查方案
1. 核心定位:区分php容器与Frankenphp容器
你执行迁移用的是php服务容器,但处理HTTP请求的是Frankenphp容器,二者是独立实例。你大概率只在php容器中安装了PostgreSQL扩展,但Frankenphp容器未配置对应扩展。
- 进入Frankenphp容器检查已安装扩展:
查看输出中是否存在docker compose exec frankenphp php -mpdo_pgsql和pgsql。如果缺失,修改Frankenphp的Dockerfile,添加扩展安装步骤:
重新构建Frankenphp镜像:# 安装PostgreSQL依赖与PHP扩展 RUN apt-get update && apt-get install -y libpq-dev \ && docker-php-ext-install pdo_pgsql pgsqldocker compose build frankenphp
2. 验证Frankenphp容器的PHP配置
即使安装了扩展,也要确保Frankenphp容器的php.ini已启用对应扩展:
docker compose exec frankenphp php -i | grep "pgsql"
如果无相关输出,需在Frankenphp的Dockerfile中添加启用逻辑,或者挂载正确配置的php.ini到容器对应路径(如/usr/local/etc/php/php.ini)。
3. 确认Laravel环境配置一致性
检查Frankenphp容器内的.env数据库配置是否与php容器一致:
docker compose exec frankenphp printenv | grep DB_
确保DB_CONNECTION=pgsql、DB_HOST、DB_USER等参数完全匹配,避免容器间环境变量差异导致的连接问题。
4. 测试Frankenphp与PostgreSQL的网络连通性
虽然php容器能正常连接数据库,但Frankenphp容器可能存在网络隔离问题:
docker compose exec frankenphp psql -h <postgres服务名> -U <DB_USER> -d <DB_DATABASE>
替换<postgres服务名>为你docker-compose.yml中的PostgreSQL服务名称(如postgres),若能成功连接则网络正常;若失败,需检查Docker Compose的网络配置,确保Frankenphp与PostgreSQL处于同一网络。
内容的提问来源于stack exchange,提问作者arnaudov
相关产品推荐
相关产品推荐

