1

我正在将我的开发环境从旧的 XAMPP 安装更改为新的 dockerized 解决方案(操作系统:Ubuntu Mate LTS 18.03)。似乎一切运行良好,但我仍然没有从 Apache2 docker 镜像到我的 Postgres DBMS docker 镜像的连接。:-/

我使用Postgres 10.3 服务器的官方postgres docker 映像。数据库已启动,我可以通过我的 NetBeans 11 IDE、PgAdmin 工具和本地运行的 JavaEE Tomcat 服务器进行连接。服务器还接受本地主机之外的连接。启动 postgres 映像的命令是:

docker run -d -p 5432:5432 --name postgres -v /media/veracrypt1/Applications/docker/postgreSQL:/var/lib/postgresql/data postgres

作为 Apache /PHP 映像,我还使用来自 DockerHub 的官方php7.3-apache。我实例化的图像:

docker run -d -p 80:80 --name php-7.3 -v /media/veracrypt1/htdocs:/var/www/html -v /media/veracrypt1/Applications/docker/php-7.3/apache:/etc/apache2 -v /media/veracrypt1/Applications/docker/php-7.3/php:/usr/local/etc/php php:7.3-apache

PHP 脚本也得到了很好的执行。

然后我用 php_info() 发现 Apache 图像不包含 postgres pdo 扩展。我通过在 google 上找到的解决方案在 docker 映像中添加了扩展:

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

在此过程之后,postgres PDO 扩展出现在 php_info() 中并通过命令 \PDO::getAvailableDrivers() 出现。但是当我尝试连接时,我仍然收到服务器超时: [ERROR] DBMS Connection SQLSTATE[08006] [7] timeout expired

由于驱动程序输出得到以下信息:可用驱动程序:array(2) { [0]=> string(6) "sqlite" 2 => string(5) "pgsql" }

我的 php 片段似乎也很好:

$dsn = sprintf("pgsql:host=%s;port=%d;dbname=%s;user=%s;password=%s",
                    $params[$this->host],
                    $params[$this->port],
                    $params[$this->schemata],
                    $params[$this->user],
                    $params[$this->password]);
$ dbh = new \PDO($dsn $this->user, $this->password);
$dbh->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
$dbh->setAttribute(\PDO::ATTR_TIMEOUT, 10);
$pdo = $dbh->query($sql);

数据库表可用并且 SELECT 语句在 NetBeans IDE 中运行良好。

看起来 php7.3-apache 映像存在问题。我想我激活扩展的方式不正确。如果有人可以帮助我获得 DBMS 连接会很棒。非常感谢先进。

编辑:完整的 POD 连接字符串是: pgsql:host=172.17.0.1;port=5432;dbname=tinycms;user=tinycms;password=tinycms 数据库用户等是正确的,因为我在我的 Netbeans IDE 中使用它来连接到 postgres。

postgres docker容器的CMD(包括PHP脚本的执行:

jean@jean-ThinkPad-T540p:~$ docker start -a postgres
2019-07-13 16:19:20.680 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
2019-07-13 16:19:20.680 UTC [1] LOG:  listening on IPv6 address "::", port 5432
2019-07-13 16:19:20.848 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2019-07-13 16:19:21.446 UTC [26] LOG:  database system was shut down at
2019-07-13 16:18:45 UTC
2019-07-13 16:19:21.637 UTC [1] LOG:  database system is ready to accept connections
4

0 回答 0