访问运行在流浪汉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
规则。流浪端口转发将自行处理。
检查以下几点:
- 检查你的PostgreSQL端口游民实例。如果端口与特定IP绑定,则必须在
Vagrantfile
中提供IP来转发该IP和端口。像
guest_ip(串) - 来宾IP绑定转发端口。如果 未设置,端口将转到每个IP接口。默认情况下, 这是空的。
- 同样,可以给主机IP也
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
啊,我傻。我错过了我需要明确添加'-h localhost',认为这是默认设置。当我补充说,它的工作。谢谢! – Gustav