How to make postgres.app db accessible to docker container?

1.8k Views Asked by At

I got postgres.app running locally on my Mac and would like my local docker container to be able to connect to it. How do I best do this?

I found this post that suggests to pass the Docker host’s IP address to a container using the --add-host flag (Host port with DB to Docker container). However, my laptop's IP address changes frequently. Isn't there an easier way of doing this? Isn't there an easy way to open a local port to a container?

3

There are 3 best solutions below

0
On

Few things

  • Use docker.for.mac.localhost as your HOST (This assumes you have the latest Docker for Mac as @Pete mentioned)
  • Make sure there is such a record in ~/Library/Application Support/Postgres/var-9.6/pg_hba.conf

host all all 0.0.0.0/0 trust

  • Change this line listen_addresses = 'localhost' in ~/Library/Application Support/Postgres/var-9.6/postgresql.conf

to

listen_addresses = '*'

or

listen_addresses = 'localhost, docker.for.mac.localhost'

0
On

From your container, try connecting to hostname docker.for.mac.localhost. For example:

psql -U my_user docker.for.mac.localhost -U my_user my_database

From the docs:

The Mac has a changing IP address (or none if you have no network access). From 17.06 onwards our recommendation is to connect to the special Mac-only DNS name docker.for.mac.localhost which will resolve to the internal IP address used by the host.

Note: this requires Docker for Mac >= 17.06.0-ce-mac18, 2017-06-28

0
On

If we are talking about a developers workstations, you could start your Docker Container inside the Host Network.

docker run --net=host myContainer

So your container runs in the same stack as your Host, and should be able to access your postgres.app.