如何从docker-compose连接到Host PostgreSQL?

6ljaweal  于 2023-05-28  发布在  Docker
关注(0)|答案(4)|浏览(196)

我有一个安装了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

ztyzrc3y

ztyzrc3y1#

根据文档,从版本18.03开始,使用host.docker.internal作为DNS对我来说是可行的,而不需要指定--net=hostnetwork_mode: "host"

whitzsjs

whitzsjs2#

如果你在Linux操作系统上,这将起作用。但这在Mac或Windows上不起作用。问题是,当你使用--net=host时,你仍然不在主机网络上。这就是docker for windows工作方式的局限性
您需要使用docker.for.win.localhost作为主机,而不是localhost。这是一个特殊的DNS名称,当您想要引用主机localhost时,可以在Docker for Windows上使用

5f0d552i

5f0d552i3#

如果您是mac用户,请使用“host.docker.internal:5432”连接到localhost Postgres,docs

mum43rcc

mum43rcc4#

1)确保你的postgresql示例监听所有的地址,而不仅仅是localhost。
在postgresql.conf中设置listen_addresses如下:

listen_addresses='*'

2)你正在尝试从你的容器连接到localhost:5432。这不是主机的IP地址,而是容器的loopback device地址。你需要使用你的Docker Bridge IP地址。

相关问题