I like using Postgres.app to run PostgreSQL on my macOS laptop. I use it for a bunch of different projects.
When I deploy applications to Fly.io I build them as Docker containers and inject the Fly PostgreSQL database details as a
DATABASE_URL environment variable.
In order to test those containers on my laptop, I needed to figure out a way to set a
DATABASE_URL that would point to the PostgreSQL I have running on my own laptop - so that I didn't need to spin up another PostgreSQL Docker container just for testing purposes.
The first thing to know is that Docker for Desktop sets
host.docker.internal as a magic hostname inside the container that refers back to the IP address of the host machine.
So ideally something like this should work:
docker run --env DATABASE_URL="postgres://docker:email@example.com:5432/pillarpointstewards" \ -p 8080:8000 pillarpointstewards
-p 8080:8000 here to set port 8080 on my laptop to forward to the Django application server running on port 8000 inside the container.
To create that PostgreSQL account with username
docker and password
docker-password (but pick a better password than that) I used Postico to open a connection to my
postgres database and ran the following:
create role docker login password 'docker-password';
Then I connected to my application database (in this case
pillarpointstewards) and ran the following to grant permissions to that user:
GRANT ALL ON ALL TABLES IN SCHEMA "public" TO docker;
Having done this, the container run with the above
DATABASE_URL environment variable was able to both connect to the server and run Django migrations too.
Created 2022-03-31T22:48:17-07:00 · Edit