Reputation: 1903
I have a server with installed PostgreSQL. All my services work in containers (docker-compose). I want to use my Host PostgreSQL from containers. Buy I have the error:
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)
My docker-compose is using host network_mode, like this:
version: '3'
services:
shop:
container_name: shop
build: ./shop
hostname: shop
restart: always
ports:
- 8084:8084
network_mode: "host"
My database connection URL is: jdbc:postgresql://localhost:5432/shop-bd
Upvotes: 12
Views: 23205
Reputation: 510
According to the documentation, from version 18.03 onwards, using host.docker.internal
as DNS works for me, without specifying neither --net=host
or network_mode: "host"
Upvotes: 30
Reputation: 409
If you are mac user, use "host.docker.internal:5432" to connect to localhost Postgres, docs.
Upvotes: 4
Reputation: 146630
This would have worked if you were on linux OS. But this won't work on Mac or Windows. The thing is that when you use --net=host
, you still are not on host network. That is the limitation of how docker for windows work
Instead of localhost you need to use docker.for.win.localhost
as the host. This is a special DNS name which is available on Docker for Windows when you want to refer to the host localhost
Upvotes: 6
Reputation: 13300
1) ensure that your postgresql instance is listening to all addresses and not only localhost.
In postgresql.conf set listen_addresses
as follows:
listen_addresses='*'
2) you are trying to connect from your container to localhost:5432
. That is NOT your host's IP address, but the address of your container's loopback device
. You need to use your docker bridge IP address instead.
Upvotes: -3