我在macOS上的Vagrant centos 7.2框上运行postgresql。我已经确认postgres在端口5432上的Vagrant盒子上启动并运行,方法是使用盒子本身上的psql
连接到它。我试图将Vagrant盒子上的端口5432转发到我的主机上的端口10001,如下所示:
config.vm.define "acc_db" do | acc_db |
acc_db.vm.box = "bento/centos-7.2"
acc_db.vm.hostname = "acc.db"
acc_db.vm.network :forwarded_port, guest: 5432, host: 10001
acc_db.vm.provision "shell",
inline: "yum upgrade -y -q --nogpgcheck"
acc_db.vm.provision "shell",
path: "install_postgres.sh"
我已将pg_hba.conf
更改为绑定到所有IP地址并允许密码验证,如下所示:
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 0.0.0.0/0 md5
# IPv6 local connections:
host all all ::1/128 ident
我关闭了防火墙,但我仍然无法连接到主机上端口10001上的postgres:
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.10001"?
如何修复此问题以便端口转发有效?
我看过https://gielberkers.com/fixing-vagrant-port-forwarding-osx-yosemite/但是没有尝试过,因为它涉及触摸我不熟悉的文件。这是正确的方法吗?看起来你必须通过Vagrant明确允许你想要转发的每个端口。
答案 0 :(得分:1)
...connections on Unix domain socket "/tmp/.s.PGSQL.10001"
表示您没有尝试TCP / IP连接,因此无法进行端口转发。
默认情况下,psql
在类似unix的操作系统上使用Unix domain sockets。
使用psql的-h
选项指定主机,如果使用IPv4,则可能是127.0.0.1
。
此外,PostgreSQL服务器必须侦听连接将被路由到的网络接口。默认情况下,出于安全原因,它仅侦听localhost
在listen_addresses='*'
中设置postgresql.conf
会使其监听所有现有接口。