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 - dashbitco/broadway_bike_sharing_rabbitmq_example: An example of a Broadway pipeline for a bike sharing app with RabbitMQ and PostgreSQL – 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
D4no0

D4no0

Just installed docker desktop on my mac and everything works. There is most probably an issue with your installation.

I’ve ran the following commands (note the usage of docker compose, the old command docker-compose is deprecated from long ago):

# Just because I am too lazy to setup the rabbitmq queue manually, 
# you should get errors that tables don't exist from app, 
# close after it runs for a few seconds
docker compose up 

docker compose run app mix setup
docker compose up

I’ve used such docker-compose setups a lot of times in production and there is nothing wrong with it, most probably you have some installation issues on your machine.

dimitarvp

dimitarvp

It is random if he didn’t change the ports part of the configuration, the version he linked to was only specifying container port which means that the host port is chosen at random every time.

Where Next?

Popular in Questions Top

minhajuddin
I have seen a lot of code which picks the first element from a list using Enum.at(0) instead of List.first. Is there a reason why people ...
New
dotdotdotPaul
Okay, I'm having a heck of a time trying to figure out how to best handle the validation of belongs_to associations in Ecto. I'm sure I'...
New
pmjoe
I have a relationship of love and hate with Elixir. Lots of things are just absolutely right, but there are some things that are kind of ...
New
ycv005
I have followed this StackOverflow post to install the specific version of Erlang. And When I am running mix ecto.setup then getting fol...
New
Jim
As a follow up to my earlier question: I have the code compiling and running but not getting a successful login from the rest server. ...
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
vonH
When I run the Plug and I recompile I wind up having to use Ctrl C to quit iex and start again. Witht the help of rlwrap I can use the cu...
New
stefanluptak
Hello everybody, usually, I use a 29" ultra-wide monitor for VSCode which can easily accomodate explorer (files panel) + file with code ...
New
Exadra37
Sometimes I want to check if the input into a function is not a blank string. My first approach: defmodule Example do def do_stuff(s...
New
lucidguppy
I have a super simple question about elixir - how would I take a file like this foo bar baz and output a new file that enumerates th...
New

Other popular topics Top

TunkShif
This post is an instruction guide to help you setup your Neovim for Elixir development from scratch. It includes general information on h...
273 38985 115
New
lastday4you
I wanted to check elixir version in phoenix because i found that my elixir is 1.5 but when i use Enum.chunk_by it said the function is un...
New
fireproofsocks
I’m working on defining a simple Ecto schema for a table (in PostGres), but I don’t see where I can define a column as NOT NULL. Conside...
New
JDanielMartinez
Hi! May someone helps me, please! I have two apps into an umbrella project: the first one is Database, which manages queries, and the se...
New
vrod
I am using the Starship cross-shell prompt – it seems pretty nice, but I get some errors: [WARN] - (starship::utils): Executing command ...
New
Brian
What is the proper way to load a module from a file in to IEX? In the python world, doing something like this pretty standard: from ....
New
William
I would like to know that is there any online source for learning Phoenix Framework for building E-Commerce Store? Any advantage on build...
New
script
If I have a string “1000 cfu/ml” . I want to remove the characters and / and space . So the string is like this "1000" What is the ...
New
johnnyicon
Hi all, I've just started learning Elixir and Phoenix Framework, so please pardon my n00bness at this stage. I'm trying to use Postg...
New
jay1
Why is it that the mnesia database isn’t the most preferred database for use in Elixir/Phoenix?
New

We're in Beta

About us Mission Statement