访问运行在Vagrant的Docker容器中的PostgreSQL

我有一个Vagrant框,其中有一个运行PostgreSQL的Docker容器。 这个容器是在这里find的官方的

我希望能够使用psql从主机(即Vagrant外部)连接到Postgres,但无法使其正常工作。 (获取“无法连接” – 错误)。 我在Vagrantfile中添加了一个端口:

config.vm.network "forwarded_port", guest: 5432, host: 5432 

但是我猜这是不够的,因为Docker容器有自己的IP(172.17.0.2)? 我的想法是,我会把一个iptable的规则,把所有的请求转发到端口5432上的stream浪者箱到目的地172.17.0.2:5432这样的盒子:

 iptables -t nat -A PREROUTING -p tcp --dport 5432 -j DNAT --to-destination 172.17.0.2:5432 iptables -t nat -A POSTROUTING -j MASQUERADE 

但是我仍然无法工作。 感谢任何帮助!

不需要在外部添加iptables规则。 stream浪的端口转发将保重。

检查以下几点:

  1. 在stream浪的实例中检查你的PostgreSQL端口。 如果端口与特定的IP绑定,那么你必须给Vagrantfile中的IP来转发该IP和端口。 喜欢

guest_ip(string) – 将转发的端口绑定到的来宾IP。 如果没有设置,端口将转到每个IP接口。 默认情况下,这是空的。

  1. 同样,你也可以给主机IP

host_ip(string) – 要将转发的端口绑定到的主机上的IP。 如果没有指定,它将被绑定到每个IP。 默认情况下,这是空的。

如果一切正常,你可以连接使用命令如:

 psql -p 5432 -d db_name -U user -h localhost 

不要忘记添加-h与主机名或IP。 另请参阅这些答案:

1. 无法通过ssh连接到转发的端口

2. 使用端口转发到另一台机器访问远程PostgreSQL服务器