ubuntu – 允许docker容器连接到本地/主机postgres数据库

前端之家收集整理的这篇文章主要介绍了ubuntu – 允许docker容器连接到本地/主机postgres数据库前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我最近一直在玩Docker和QGIS,并按照 this tutorial中的说明安装了一个容器。

一切工作伟大,虽然我无法连接到一个localhost包含所有我的GIS数据的postgres数据库。我想这是因为我的postgres数据库未配置为接受远程连接,并已编辑postgres配置文件,以允许远程连接使用this article中的说明。

我仍然得到一个错误消息,当我尝试并连接到我的数据库运行QGIS在Docker:无法连接到服务器:连接拒绝是服务器运行在主机“localhost”(:: 1)和接受TCP / IP连接端口5433?
postgres服务器正在运行,我编辑了我的pg_hba.conf文件以允许来自一系列IP地址(172.17.0.0/32)的连接。我以前使用docker ps查询了docker容器的IP地址,虽然IP地址发生了更改,但是目前为止始终在172.17.0.x

任何想法为什么我不能连接到这个数据库?大概东西很简单我想象!

我运行Ubuntu 14.04; Postgres 9.3

TL; DR

>使用172.17.0.0/16作为IP地址范围,而不是172.17.0.0/32。
>不要使用localhost连接到主机上的Postgresql数据库,而是使用主机的IP。要使容器可移植,请使用–add-host = database:< host-ip>启动容器。标志并使用数据库作为主机名连接到Postgresql
>确保Postresql配置为侦听所有IP地址上的连接,而不仅仅是localhost。在Postgresql配置文件中查找设置listen_addresses,通常位于/etc/postgresql/9.3/main/postgresql.conf(信用到@DazmoNorton)中。

长版本

172.17.0.0/32不是IP地址范围,而是单个地址(namly 172.17.0.0)。没有Docker容器将获得分配的地址,因为它是Docker桥接器(docker0)接口的网络地址。

当Docker启动时,它将创建一个新的网桥接口,你可以很容易地看到当调用ip a:

$ ip a
...
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN 
    link/ether 56:84:7a:fe:97:99 brd ff:ff:ff:ff:ff:ff
    inet 172.17.42.1/16 scope global docker0
       valid_lft forever preferred_lft forever

正如你可以看到,在我的情况下,docker0接口的IP地址为172.17.42.1,网络掩码为/ 16(或255.255.0.0)。这意味着网络地址是172.17.0.0/16。

IP地址是随机分配的,但没有任何其他配置,它将始终位于172.17.0.0/16网络中。对于每个Docker容器,将分配来自该范围的随机地址。

这意味着,如果要将来自所有可能的容器的访问权限授予您的数据库,请使用172.17.0.0/16。

猜你在找的Ubuntu相关文章