fireproofsocks

fireproofsocks

Connecting to Postgres in docker-compose

Dumb question and one I used to know the answer to… but how does one connect to a postgres instance running inside docker-compose? I thought I would work through Broadway’s example repo GitHub - elixir-broadway/broadway_bike_sharing_rabbitmq_example: An example of a Broadway pipeline for a bike sharing app with RabbitMQ and PostgreSQL · GitHub – it uses docker-compose to spin up both a version of Postgres (one specifically with postgis installed) and an instance of RabbitMQ.

docker-compose up seems to have worked… no errors, and Docker Desktop shows 3 containers: rabbitmq-1, db-1, and app-1. RabbitMQ and Postgres are running, but the app has crashed because it can’t connect to the database.

Looking more closely, it seems like the port directive in docker-compose.yml is being ignored. I’ve deleted the images and rebuilt this several times in the course of testing it, and each time the ports used come up with something more random (?) like 53665. If I set my database client to use that port, I can connect.

Can someone clarify why this port is changing? And I seem to remember that the list of services defined inside of the docker-compose.yml corresponded to hostnames? Is that accurate? Like, instead of localhost, you might reference a hostname of db – but that doesn’t seem to work (even if I use the numeric extension).

Most Liked

dimitarvp

dimitarvp

Again, very likely it’s because their docker-compose.yaml file is used for CI/CD and deployment, not for local development, that’s my hypothesis. If it was used for local dev then surely it would have the host:container port pairs.

D4no0

D4no0

Yes, you can reference containers by their service names, no numeric extension should be added, the name should be exactly as it is defined in docker-compose.yml.

port option is for just exposing the container port to your host, the option port: "5432" will expose port 5432 from the container on your host on 5432.

I would recommend checking that your host 5432 port is free, otherwise map to a different port:

ports:
      - "5432:5433"

Also ensure that you are not connecting to some already exsting volumes with some strange Postgres configurations, a clean postgres/postgis container will always serve on port 5432 by default.

The last and the first thing I should have mentioned is to check that the database container has started as expected, it can happen that it will not start if it’s missing some mandatory configuration options (like username), you should have logs that it started accepting clients on port 5432.

D4no0

D4no0

I’ve just ran the docker-compose and everything works as expected from the standpoint of database. It’s a very strange setup, but it works as expected without any issues.

What OS are you using? I’ve ran the example on ubuntu.

The only thing to keep in mind is that ecto migrations are not ran automatically, so you have to execute this command before starting the compose:

docker-compose run app mix setup

Where Next?

Popular in Questions Top

rms.mrcs
Hi, I need to transform a list of numbers into a map where the keys are the indexes and the values are the original values of the list. ...
New
nobody
Hi! In PHP: $_SERVER[‘SERVER_ADDR’] - in Elixir? Searched the docs for ip address and the web, no good results. Thanks!
New
Lily
In templates/appointment/index.html.eex: <%= for appointment <- @appointments do %> <tr> <td><%= appoi...
New
9mm
I am constructing a JSON object (map) and I need to conditionally set a field. I’m trying to write proper elixir-way code… and I’m at a l...
New
sen
Hi All, I set a environment variables in dev.exs , like below code. when i start server, how can i set the ${enable} value? thanks. d...
New
sergio_101
I am VERY much an elixir newbie. I have taken one elixir course and one phoenix course on Udemy. During that course, I saw the instructor...
New
Harrisonl
We have an ECS cluster with 4 services, where each task joins a single cluster, via discovery ECS discovery service. Currently when I de...
New

Other popular topics Top

lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New
aadeshere1
I have a another noob question about loop. Since elixir is immutable, while loop is not directly possible. total = 10 while total != 0 ...
New
chrismccord
Phoenix 1.4.0 released Phoenix 1.4 is out! This release ships with exciting new features, most notably with HTTP2 support, improved deve...
688 31494 112
New
gausby
I asked this very same question on twitter and got some interesting feedback, but I thought it would be a good question to ask here as we...
1207 40042 209
New
AngeloChecked
What learn first? Rust or Elixir Hi Elixir community! I’m here because i want learn a new language. I’m a junior developer and mainly i ...
New
AstonJ
Posting this to see if we can make things easier for people to get into Neovim. If you use Neovim and have a favourite distro please let ...
New

We're in Beta

About us Mission Statement