访问运行在流浪汉Docker容器中的PostgreSQL

访问运行在流浪汉Docker容器中的PostgreSQL

问题描述:

我有一个Vagrant框,其中有一个运行PostgreSQL的Docker容器。该容器是官方发现的here访问运行在流浪汉Docker容器中的PostgreSQL

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

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

,但我想,因为码头工人容器都有自己的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规则。流浪端口转发将自行处理。

检查以下几点:

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

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

  1. 同样,可以给主机IP也
  2. host_ip(字符串) - 该IP主机上要绑定转发 端口。如果没有指定,它将被绑定到每个IP。默认情况下, 这是空的。

    如果一切OK,你可以使用命令状连接:

    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

开始=>
+0

啊,我傻。我错过了我需要明确添加'-h localhost',认为这是默认设置。当我补充说,它的工作。谢谢! – Gustav