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

Docker环境下Frankenphp+Laravel连接PostgreSQL提示找不到驱动

问题排查方案

1. 核心定位:区分php容器与Frankenphp容器

你执行迁移用的是php服务容器,但处理HTTP请求的是Frankenphp容器,二者是独立实例。你大概率只在php容器中安装了PostgreSQL扩展,但Frankenphp容器未配置对应扩展。

  • 进入Frankenphp容器检查已安装扩展:
    docker compose exec frankenphp php -m
    
    查看输出中是否存在pdo_pgsql和pgsql。如果缺失,修改Frankenphp的Dockerfile,添加扩展安装步骤:
    # 安装PostgreSQL依赖与PHP扩展
    RUN apt-get update && apt-get install -y libpq-dev \
        && docker-php-ext-install pdo_pgsql pgsql
    
    重新构建Frankenphp镜像:
    docker 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 22:54:53