我有一个安装了PostgreSQL的服务器。我的所有服务都在容器中工作(docker-compose)。我想从容器中使用我的Host PostgreSQL。购买我有错误:
Unable to obtain Jdbc connection from DataSource (jdbc:postgresql://localhost:5432/shop-bd) for user 'shop-bd-user': Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL State : 08001
Error Code : 0
Message : Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
Connection refused (Connection refused)
我的docker-compose使用的是host network_mode,如下所示:
version: '3'
services:
shop:
container_name: shop
build: ./shop
hostname: shop
restart: always
ports:
- 8084:8084
network_mode: "host"
我的数据库连接URL为:jdbc:PostgreSQL://localhost:5432/shop-bd
4条答案
按热度按时间ztyzrc3y1#
根据文档,从版本18.03开始,使用
host.docker.internal
作为DNS对我来说是可行的,而不需要指定--net=host
或network_mode: "host"
whitzsjs2#
如果你在Linux操作系统上,这将起作用。但这在Mac或Windows上不起作用。问题是,当你使用
--net=host
时,你仍然不在主机网络上。这就是docker for windows工作方式的局限性您需要使用
docker.for.win.localhost
作为主机,而不是localhost。这是一个特殊的DNS名称,当您想要引用主机localhost时,可以在Docker for Windows上使用5f0d552i3#
如果您是mac用户,请使用“host.docker.internal:5432”连接到localhost Postgres,docs。
mum43rcc4#
1)确保你的postgresql示例监听所有的地址,而不仅仅是localhost。
在postgresql.conf中设置
listen_addresses
如下:2)你正在尝试从你的容器连接到
localhost:5432
。这不是主机的IP地址,而是容器的loopback device
地址。你需要使用你的Docker Bridge IP地址。