How to connect from docker-compose to Host PostgreSQL?

12,352

Solution 1

Updated Apri, 2018

According to the document, from version 18.03 onwards, using host.docker.internal as DNS works for me, without specifying neither --net=host or network_mode: "host"

Solution 2

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

Share:
12,352
Max
Author by

Max

Updated on June 14, 2022

Comments

  • Max
    Max almost 2 years

    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

  • Max
    Max over 6 years
    I use --net=host, so I can use localhost. I think, that the problem occurs because of Windows.
  • whites11
    whites11 over 6 years
    Yeah, you're right I missed that you are using host networking.
  • Brendan Goggin
    Brendan Goggin over 5 years
    Incredibly helpful. Please upvote and accept this answer!
  • Max
    Max over 5 years
    @BrendanGoggin sure
  • 030
    030 about 5 years
    This is for development purpose and will not work in a production environment outside of Docker Desktop for Mac