我最近一直在使用Docker和QGIS,并按照
本教程
..。
虽然我无法连接到包含所有GIS数据的localhost postgres数据库,但一切工作正常。我认为这是因为我的postgres数据库未配置为接受远程连接,并且一直在编辑postgres conf文件以允许使用中的说明进行远程连接
本文
..。
当我尝试连接到在Docker中运行QGIS的数据库时,仍然收到错误消息:无法连接到服务器:
postgres服务器正在运行,我编辑了我的
pg
_
hba.conf
文件以允许来自IP地址范围(172.17.0.0/32)的连接。我之前使用以下命令查询过docker容器的IP地址
尽管IP地址发生了变化,但到目前为止,它始终在172.17.0.x范围内
你知道为什么我不能连接到这个数据库吗?我想可能是非常简单的事情!
我正在运行Ubuntu 14.04;Postgres 9.3
发布于 2015-07-06 23:05:50
TL;DR
使用
作为IP地址范围,不是
..。
不要使用
连接到主机上的PostgreSQL数据库,而不是主机的IP。若要保持容器的可移植性,请使用
标记和使用
作为连接到PostgreSQL的主机名。
确保将PostgreSQL配置为侦听所有IP地址上的连接,而不是仅侦听
..。查找设置
在PostgreSQL的配置文件中,通常位于
(致谢@DazmoNorton)。
长版本
不是
范围
多个IP地址,而不是单个地址(名称
)。任何Docker容器都不会分配该地址,因为它是Docker网桥的网络地址(
)接口。
当Docker启动时,它将创建一个新的网桥网络接口,当调用
$ ip a
...
3: docker0: 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
如您所见,在我的例子中,
接口具有IP地址
使用网络掩码
(或
)。这意味着网络地址是
..。
IP地址是随机分配的,但不需要任何其他配置,它将始终位于
网络。对于每个Docker容器,将从该范围中分配一个随机地址。
这意味着,如果要从所有可能的容器授予对数据库的访问权限,请使用
..。
发布于 2017-01-10 13:57:27
Docker for Mac解决方案
17.06起
感谢@Birchlabs的评论,现在它变得更容易了
仅限Mac的特殊DNS名称可用
docker run -e DB_PORT=5432 -e DB_HOST=docker.for.mac.host.internal
从17.12.0-cd-mac46开始,
应该使用,而不是
..。请参见
发行说明
有关详细信息,请参阅。
旧版本
@helmbert的回答很好地解释了这个问题。但是Docker for Mac
不暴露网桥网络
,所以我不得不使用这个技巧来解决这个限制:
$ sudo ifconfig lo0 alias 10.200.10.1/24
打开
然后添加这一行:
host all all 10.200.10.1/24 trust
打开
和编辑更改
listen_addresses = '*'
重新加载服务并启动容器:
$ PGDATA=/usr/local/var/postgres pg_ctl reload
$ docker run -e DB_PORT=5432 -e DB_HOST=10.200.10.1 my_app
此解决方法的作用与@helmbert的答案基本相同,但使用的IP地址附加到
而不是
网络接口。
发布于 2019-03-21 05:33:16
简单的解决方案
只需添加
至
..。仅此而已!
这样,容器将使用主机的网络,因此
和
将指向主机(默认情况下,它们指向容器)。示例:
docker run -d --network=host \
-e "DB_DBNAME=your_db" \
-e "DB_PORT=5432" \
-e "DB_USER=your_db_user" \
-e "DB_PASS=your_db_password" \
-e "DB_HOST=127.0.0.1" \
--name foobar foo/bar
https://stackoverflow.com/questions/31249112
复制相似问题