【问题标题】:Unable to connect to dockerized postgres on localhost, but remote connection is working无法连接到本地主机上的 dockerized postgres,但远程连接正常
【发布时间】:2017-10-10 00:02:25
【问题描述】:

我用

创建了 docker postgres 实例
docker run -d \
  --name test_db \
  -v data:/var/lib/postgresql/data \
  -e "POSTGRES_PASSWORD=abcdefghij" \
  -e "POSTGRES_USER=testuser" \
  -p 5432:5432 \
  postgres

我可以使用公共服务器 ip 从其他主机正确连接到该数据库,例如。

 psql -U testuser -h 111.111.111.111 -d testuser   // in reality I use proper IP

但如果我想在容器运行的同一主机上执行此操作,则无法连接(它只是挂起)。

我的 pg_hba.conf(容器内)

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             all                                     trust
host    all             all             127.0.0.1/32            trust
host    all             all             ::1/128                 trust    
host    all             all             0.0.0.0/0               md5

在 postgresql.conf 里面有一行:

listen_addresses = '*'

iptables相关行:

$ iptables -L | grep sql
ACCEPT     tcp  --  anywhere             172.19.0.2           tcp dpt:postgresql

此外,如果我使用 172.19.0.2 地址,它可以在本地工作,但如果我使用公共服务器 IP,它就会挂起。我不知道为什么会这样。我的应用程序分布在许多主机中,包括一个带有 DB 的主机,并且我不想根据位置使用其他地址。有人可以帮忙吗?

【问题讨论】:

    标签: postgresql docker networking docker-networking


    【解决方案1】:

    问题很可能不是 Docker,根据您的描述,您的(公司)网络配置将数据包路由到默认网关的 111.111.111.111。我怀疑公共 ip 111.111.111.111 是您在 NAT 后面的 IP。

    简而言之,111.111.111.111 不会映射到 127.0.0.1,因为绑定是在您计算机之外的某个地方进行的。

    你会想做这样的事情iptables redirect all requests to localhost

    【讨论】:

    • 两台测试服务器只是 ArubaCloud 上的普通干净 VPS。我不确定是否涉及任何 NAT,但不应该。我会尝试使用 iptables 进行重定向并说是否有效。
    猜你喜欢
    • 2011-09-03
    • 1970-01-01
    • 2019-04-25
    • 2019-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多