DEV Community

Cover image for Using Postgres with Docker on a Mac
Rudolf Olah
Rudolf Olah

Posted on • Edited on

Using Postgres with Docker on a Mac

When running PostgreSQL in a Docker container for testing or local development purposes, you may encounter an issue where the Postgres server on the host takes precedence over the Postgres server running in the container.

If you experience this issue, you will receive an error message such as "Role 'postgres' does not exist" when you attempt to connect to the server.

It can happen when you run postgresql as a service through Homebrew.

Clean Up: Stopping Postgres on the Host

The solution is straightforward: check which processes are running on port 5432, stop the service, and then clean up any remaining processes:

brew services stop postgresql
lsof -i :5432
kill -9 <pid>
Enter fullscreen mode Exit fullscreen mode

Here's what the output will look like:

% brew services stop postgresql
Stopping `postgresql@14`... (might take a while)
==> Successfully stopped `postgresql@14` (label: homebrew.mxcl.postgresql@14)

% lsof -i :5432
COMMAND     PID    USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
postgres    664 rudolfo    8u  IPv6 0xda1da9a9441be1cf      0t0  TCP localhost:postgresql (LISTEN)
postgres    664 rudolfo    9u  IPv4 0xda1da9a47826a65f      0t0  TCP localhost:postgresql (LISTEN)
com.docke 44908 rudolfo  244u  IPv6 0xda1da9a47921f1cf      0t0  TCP *:postgresql (LISTEN)

% kill -9 664

% lsof -i :5432
COMMAND     PID    USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
com.docke 44908 rudolfo  244u  IPv6 0xda1da9a47921f1cf      0t0  TCP *:postgresql (LISTEN)
Enter fullscreen mode Exit fullscreen mode

After that, any connection to localhost:5432 will be to the Postgres server running within the Docker container.

This article helped me understand the underlying issue: "How to Fix the “Role ‘Postgres’ Does Not Exist” Error When Deploying PostgreSQL Docker Container"

Re-mapping The Container Port

An alternative approach is to map the published Docker ports to a higher port range to avoid this issue:

docker run -it --rm -p 15432:5432 postgres:16
Enter fullscreen mode Exit fullscreen mode

Check "Understand permission requirements for Docker Desktop on Mac" if there are more permission or port issues.

Cover image by Bernd 📷 Dittrich on Unsplash

Top comments (0)