无法连接到PostgreSQL“角色不存在”

时间:2019-03-02 18:04:32

标签: postgresql docker

我正在尝试从Docker容器连接到postgresql,但出现以下错误:

2019-03-02 20:10:45.218 MSK [2777] spectrum_user@spectrum_db FATAL:  password authentication failed for user "spectrum_user"
2019-03-02 20:10:45.218 MSK [2777] spectrum_user@spectrum_db DETAIL:  Role "spectrum_user" does not exist.
    Connection matched pg_hba.conf line 100: "host  all     all     172.17.0.0/16       md5"

看起来像它成功连接了但认证失败。而且我不知道为什么。我可以使用psql连接到db。这个角色肯定存在。

我正在使用Ubuntu 18.04 LTS

有人有建议吗?

更新:看来我同时运行两个版本的postgresql,并且尝试连接到错误的postgresql实例。

2 个答案:

答案 0 :(得分:0)

您需要编辑pg_hba.conf。

在我安装的Ubuntu 18.04上,这是路径:

/etc/postgresql/10/main/pg_hba.conf

您可以尝试:

sudo vim /etc/postgresql/10/main/pg_hba.conf

用您选择的文本编辑器替换vim。如果没有使用此命令打开文件(文件中已经有设置),则需要在/ etc / postgresql中进行浏览以找到pg_hba.conf文件。试试:

find -name pg_hba.conf

找到并打开文件后,编辑以下几行:

在评论# IPv4 local connections:

host    all             all             172.17.0.1/24           trust

现在,您需要再编辑一个文件:

sudo vim /etc/postgresql/10/main/postgresql.conf

listen_addresses的任何引用更改为:

listen_addresses = '*'

保存所有上述更改后,运行以下命令:

sudo service postgresql restart

注意:此配置在生产环境中并不安全,您需要配置防火墙并更改其中一些设置以使其安全。这仅用于开发。

现在,只要您指向主机操作系统的postgres URL的IP地址,并且该用户存在于系统上并且该角色存在于数据库中,您就可以通过以下方式连接到主机数据库:泊坞窗容器。我也总是绑定HTTP端口,因此这可能会起作用。我需要查看您的docker文件以提供有关此信息。

您还需要允许防火墙上的端口:

sudo ufw allow from 172.17.0.1/24 to any port 5432 

如果您不关心安全性,但是以上操作仍然无效,请打开端口5432。请注意,打开端口可能不安全。

答案 1 :(得分:0)

看来我有两个同时运行的postgresql版本,我试图连接到错误的postgresql实例。