我正在尝试从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实例。
答案 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实例。