【问题标题】:Access PostgreSQL running in Docker container in Vagrant在 Vagrant 中访问在 Docker 容器中运行的 PostgreSQL
【发布时间】:2017-02-20 23:32:32
【问题描述】:

我有一个 Vagrant 盒子,里面有一个运行 PostgreSQL 的 Docker 容器。容器是官方找到的here

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

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

但我猜这还不够,因为 Docker 容器有自己的 IP (172.17.0.2)?我的想法是我会在盒子上放置一个 iptable 规则,将所有请求转发到端口 5432 上的 Vagrant 盒子到目的地 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

但我仍然无法让它工作。感谢您的帮助!

【问题讨论】:

    标签: postgresql docker vagrant iptables


    【解决方案1】:

    无需在外部添加iptables 规则。 vagrant 端口转发将自行处理。

    检查以下几点:

    1. 检查 vagrant 实例中的 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.unable to connect to forwarded port over ssh

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

    【讨论】:

    • 啊,我真傻。我错过了我需要明确添加-h localhost,以为这是默认设置。当我补充说它有效时。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2017-03-16
    • 1970-01-01
    • 2015-02-20
    • 2016-12-14
    • 2022-07-22
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    相关资源
    最近更新 更多