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

在Vagrant中访问Docker容器中运行的PostgreSQL,postgresql,docker,vagrant,iptables,Postgresql,Docker,Vagrant,Iptables,我有一个流浪者盒子,里面有一个运行PostgreSQL的Docker容器。这个集装箱是官方发现的 我希望能够使用psql从主机(即在Vagrant之外)连接到Postgres,但无法让它工作。(获取“无法连接”-错误)。我在文件中添加了一个端口转发: config.vm.network "forwarded_port", guest: 5432, host: 5432 但我猜这还不够,因为Docker容器有自己的IP(172.17.0.2)?我的想法是,我会在该框上放置一条iptable规则,

我有一个流浪者盒子,里面有一个运行PostgreSQL的Docker容器。这个集装箱是官方发现的

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

config.vm.network "forwarded_port", guest: 5432, host: 5432
但我猜这还不够,因为Docker容器有自己的IP(172.17.0.2)?我的想法是,我会在该框上放置一条iptable规则,将所有请求转发到端口5432上的流浪者框到目的地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
规则。漂泊的港口货运将自行处理

检查以下几点:

  • 在vagrant实例中检查您的PostgreSQL端口。如果端口与特定IP绑定,则必须在
    Vagrantfile
    中提供IP以转发该IP和端口。像
  • guest_ip(字符串)-要将转发端口绑定到的guest ip。如果 未设置此选项,端口将连接到每个IP接口。默认情况下, 这是空的

  • 同样,您也可以为主机提供IP
  • host_ip(字符串)-要绑定转发的ip的主机上的ip 港口到。如果未指定,它将绑定到每个IP。默认情况下, 这是空的

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

    psql -p 5432 -d db_name -U user -h localhost
    
    不要忘记添加带有主机名或ip的
    -h
    。另请参见以下答案:

    一,


    2.

    啊,我真傻。我错过了需要显式添加
    -h localhost
    ,我认为这是默认设置。当我补充说它有效时。谢谢