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

时间:2017-02-20 14:59:04

标签: postgresql docker vagrant iptables

我有一个Vagrant框,其中有一个运行PostgreSQL的Docker容器。容器是官方发现的here

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

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

但我猜这是不够的,因为Docker容器有自己的IP(172.17.0.2)?我的想法是,我会在框上放置一个iptable规则,将所有请求转发到端口5432上的Vagrant框到目标172.17.0.2:5432,如下所示:

def cpu_load(treshold):
    import numpy as np
    import time
    start = time.time()
    while time.time() - start < treshold:
        a = np.random.random([1000, 1000])
        b = np.random.random([1000, 1000])
        c = np.mean(a*b)

但我仍然无法使其发挥作用。感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

无需在外部添加iptables规则。流浪港转发将自行解决。

检查以下几点:

  1. 检查vagrant实例中的PostgreSQL端口。如果端口与特定IP绑定,则必须在Vagrantfile中提供IP以转发该IP和端口。像
  2.   

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

    1. 同样,您也可以提供主机IP
    2.   

      host_ip(string) - 要绑定转发的主机上的IP   港口。如果未指定,则将绑定到每个IP。默认情况下,   这是空的。

      如果一切正常,您可以使用以下命令进行连接:

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

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

      1。unable to connect to forwarded port over ssh

      2。Accessing to a remote PostgreSQL server using port forwarding to another machine