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

Docker部署CodeIgniter遇pgsql扩展加载失败问题求助

解决Docker中CodeIgniter应用的pgsql扩展加载失败问题

你遇到的PHP Startup: Unable to load dynamic library 'pgsql'和Call to undefined function pg_pconnect()问题,核心是pgsql扩展没有被正确编译安装,你的Dockerfile里有两个关键错误,我帮你拆解下:

问题根源分析

  1. 错误的docker-php-ext-configure参数
    你用了-with-pgsql=/usr/local/lib/php/extension/pgsql,这个路径完全不对——docker-php-ext-configure的--with-pgsql参数需要指向系统中libpq(PostgreSQL的客户端库)的安装路径,而不是PHP的扩展目录。实际上,当你通过apt-get install libpq-dev安装依赖后,官方PHP镜像的docker-php-ext-configure脚本会自动检测到libpq的路径,根本不需要手动指定。错误的路径会导致pgsql扩展编译失败,自然生成不了pgsql.so文件。

  2. 遗漏了pgsql扩展的安装
    你的docker-php-ext-install命令只装了pdo pdo_pgsql,但pg_pconnect()这个函数属于pgsql扩展(不是pdo_pgsql),你没安装这个扩展,所以即使php.ini里开启了extension=pgsql,系统也找不到对应的文件。

另外,Dockerfile里的RUN service apache2 restart是多余的——Docker镜像构建阶段的命令不会影响容器启动后的服务状态,容器启动时Apache会自动启动,这行命令完全没用。

修正后的Dockerfile

把你的Dockerfile改成下面这样:

FROM php:7.4.1-apache
# 安装libpq-dev并清理apt缓存,减小镜像体积
RUN apt-get update && apt-get install -y libpq-dev && rm -rf /var/lib/apt/lists/*
# 不需要指定--with-pgsql路径,自动检测即可
RUN docker-php-ext-configure pgsql
# 同时安装pdo、pdo_pgsql和pgsql扩展
RUN docker-php-ext-install pdo pdo_pgsql pgsql
# 复制应用代码和php.ini配置
COPY . /var/www/html
COPY php.ini-production /usr/local/etc/php/php.ini
# 暴露端口
EXPOSE 80

验证方法

构建镜像并启动容器后,可以通过以下方式确认扩展是否安装成功:

  • 进入容器执行php -m,查看输出列表中是否有pgsql和pdo_pgsql
  • 访问你的info.php页面,查找pgsql相关的扩展信息

这样修改后,应该就能解决扩展加载失败和函数未定义的问题了。

内容的提问来源于stack exchange,提问作者anexo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 08:43:18