【问题标题】:How to fix Connection to localhost:5432 refused in postgres installed on CentOS 7?如何修复连接到 localhost:5432 在 CentOS 7 上安装的 postgres 中被拒绝?
【发布时间】:2019-11-10 01:46:20
【问题描述】:

我有一个 digitalocean droplet,我正在尝试在使用 postgres 数据库的 CentOS 7 上安装我的 Java Web 应用程序。我已经成功安装了 Java、tomcat 和 postgres 数据库。我可以使用 pgadmin 以及本地 eclipse 从本地机器连接到我的 droplet 的 postgres 数据库。但是当我在服务器上部署 Web 应用程序时,出现以下错误:

org.postgresql.util.PSQLException: Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.

我已将 listen_addresses = '*' 添加到 postgresql.conf 中

这是来自 pg_hba.conf 的代码

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
host all all 0.0.0.0/0 md5

有防火墙问题吗?我需要提供任何特殊许可吗?我用来连接的端口是 5432。我没有对端口进行任何更改。

我删除了droplet并在上面安装了ubuntu 18,我成功地能够正确连接到数据库。再次,我安装了 CentOS 7,它给出了同样的问题。

这是iptables -L的输出

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

状态

 SELinux status:                 enabled
    SELinuxfs mount:                /sys/fs/selinux
    SELinux root directory:         /etc/selinux
    Loaded policy name:             targeted
    Current mode:                   enforcing
    Mode from config file:          enforcing
    Policy MLS status:              enabled
    Policy deny_unknown status:     allowed
    Max kernel policy version:      31

【问题讨论】:

  • 我假设,您的 java 应用程序和 postgres 在同一主机上运行,​​它们不在容器中运行。你能添加iptables -L的输出吗?
  • 是的,它们在同一主机上运行。我已经用结果更新了问题。
  • 在我看来,这有点像 selinux 问题。能否请您运行命令sestatus 进行检查?
  • 在问题中更新
  • 那么你应该尝试暂时禁用selinux,以检查它是否能解决问题。以 root setenforce 0 身份尝试此命令。这应该暂时禁用它。

标签: spring postgresql centos


【解决方案1】:

由于某种原因,我的 tomcat 8 服务器今天早上也做了同样的事情,当时它之前还在工作。我查看了 /var/log/audit 中的 selinux 日志,发现以下内容让我重新开始工作:

sudo setsebool -P tomcat_can_network_connect_db true

已编辑:添加 -P 标志以在重新启动之间保持不变。

【讨论】:

  • 我完全同意我的评论只是关于测试目的。顺便说一句,可能需要 -P 标志,因为您可能希望在重新启动后保留此设置。像这样sudo setsebool -P tomcat_can_network_connect_db true
  • setenforce 1;还 sudo vi 或 sudo nano /etc/sysconfig/selinux 以确保它是永久性的。参考:thegeekdiary.com/centos-redhat-how-to-set-selinux-modes
  • 很高兴认识亚武兹!我之前大部分都省略了 -P,因为我认为我在上次重新启动时就这样做了,并且该选项没有粘住。
猜你喜欢
  • 2020-10-11
  • 2017-11-24
  • 1970-01-01
  • 2021-10-04
  • 2018-12-13
  • 2023-01-08
  • 1970-01-01
  • 2018-12-13
  • 2013-11-04
相关资源
最近更新 更多