【问题标题】:Docker PHP with pdo_pgsql install issue带有 pdo_pgsql 安装问题的 Docker PHP
【发布时间】:2017-12-02 00:42:38
【问题描述】:

我对 Docker 非常陌生,并通过它踏入了我的第一个真实项目。我们有一个使用 Codeigniter 和 PostgreSQL 的 php 应用程序,它运行良好。现在我正在尝试对其进行 docker 化,但我在使用 pdo_pgsql 驱动程序时遇到了一些问题。

我在网上找到了一些帮助来安装 pdo_pgsql 驱动程序,但是对于 php-5x,这都是过时的解决方案。我似乎可以工作,因为我检查了 phpinfo 页面并且我的 php.ini 已正确加载,并说 pdo_pgsql 和 pgsql 驱动程序都已安装并处于活动状态????

这是错误:

奇怪的是,当我第一次点击页面时,我只收到第一个错误。然后,如果我刷新页面,就会出现第二个错误。

当我登录容器并将cd 登录到它说文件不存在的目录时,我可以清楚地看到pdo.sopdo_pgsql.sopgsql.so

遇到错误

您在 config/database.php 文件中指定了无效的数据库连接组 (dockerize)。

遇到 PHP 错误

严重性:核心警告

消息:PHP 启动:无法加载动态库 '/usr/local/lib/php/extensions/no-debug-non-zts-20160303/pgsql' - /usr/local/lib/php/extensions/no -debug-non-zts-20160303/pgsql:无法打开共享对象文件:没有这样的文件或目录

文件名:未知

这里是Dockerfile

# Dockerfile
FROM php:7.1.12-apache

MAINTAINER Me <me@myself.com>

COPY deploy/config/php.ini /usr/local/etc/php/
COPY target/myapp.tar.gz /var/www/html

RUN apt-get update

# Install Postgre PDO
RUN apt-get install -y libpq-dev \
    && docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql \
    && docker-php-ext-install pdo pdo_pgsql pgsql

RUN tar -xzf /var/www/html/myapp.tar.gz \
    && cd /var/www/html \
    && rm -f myapp.tar.gz \
    && OLD_URL='http://localhost:8080' \
    && NEW_URL='http://dockerhost:8080' \
    && sed -i -e "s#$OLD_URL#$NEW_URL#" "/var/www/html/application/config/config.php"

EXPOSE 80
EXPOSE 443

这是我的docker-compose.yml

version: "3"
services:
  app:
    image: me/myapp:v1
    build: .
    ports:
      - "8080:80"
      - "8043:443"
  postgres:
    image: postgres:9.6.6
    ports:
      - "5432:5432"

这是我的 Codeigniter database.php

这会尝试使用上述 yml 连接到另一个容器中的 Postgres,该容器应该由 docker-compose 提供。我读过一些地方说我只是使用postgres 作为连接的主机,因为docker-compose.yml 文件有一个名为postgres 的服务。这听起来有点可疑,这看起来对吗?

$active_group = "dockerize";
$query_builder = TRUE;
$db['dockerize'] = array(
        'dsn'       => 'pgsql:host=postgres;port=5432;dbname=mydb;user=postgres;password=postgres',
        'hostname' => 'postgres',
        'username' => 'postgres',
        'password' => 'postgres',
        'database' => 'mydb',
        'dbdriver' => 'pdo',
        'dbprefix' => '',
        'pconnect' => FALSE,
        'db_debug' => (ENVIRONMENT !== 'production'),
        'cache_on' => FALSE,
        'cachedir' => '',
        'char_set' => 'utf8',
        'dbcollat' => 'utf8_general_ci',
        'swap_pre' => '',
        'encrypt'  => FALSE,
        'compress' => FALSE,
        'stricton' => FALSE,
        'failover' => array(),
        'save_queries' => TRUE
);

仅供参考:为了便于阅读,以上所有内容均已匿名化和精简

【问题讨论】:

    标签: php postgresql codeigniter docker


    【解决方案1】:

    哦,天哪,我想通了。所以我上面的一切都有效。 Docker 缓存的方式发生了一些奇怪的事情。我猜我没有正确更新图像。我只是删除了所有容器和图像,然后重新构建并运行它,它就神奇地工作了。在此过程中,某些目录和文件也存在一些权限问题。

    希望上面的片段对某人有所帮助,关于带有 pdo_pgsql 的 dockers php-apache 图像的文档并不多。

    【讨论】:

      猜你喜欢
      • 2011-08-03
      • 2012-12-10
      • 1970-01-01
      • 2015-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-03
      • 1970-01-01
      相关资源
      最近更新 更多