mbski

mbski

Setting up Elixir with Dockerized PostgreSQL

Hello,

I am coming back to Elixir world after one year and I wanted to learn also new stuff so I decided to use Docker to my development.

I pulled pgadmin4 and postgresql, set it up according to documentation/articles. It looks like it works fine. I can log in into pgadmin4 through docker, I can open server with credentials given for postgresql container.

Elixir works fine if I want to play with localhost - I have also desktop version of PGAdmin4 and if I use credentials and localhost I can easily create ecto database.

Problem starts when I want to use locally developed Elixir/Phoenix app with PostgreSQL which is in container. I couldn’t find anything that could have helped me resolved this.

Container name: postgres_db,
Username: postgres,
Password: admin123,
Image: postgres

dev.exs

config :weather, Weather.Repo,
  username: "postgres",
  password: "postgres",
  hostname: "postgres_db",
  port: 5432,
  database: "weather_dev",
  stacktrace: true,
  show_sensitive_data_on_connection_error: true,
  pool_size: 10

Rest left unchanged from initially created files.

PS F:\weather> mix ecto.create
Compiling 28 files (.ex)
Generated weather app

08:05:39.563 [error] Postgrex.Protocol (pid<0.416.0>) failed to connect: ** (DBConnection.ConnectionError) tcp connect (postgres_db:5432): non-existing domain - :nxdomain
** (Mix) The database for Weather.Repo couldn’t be created: connection not available and request was dropped from queue after 2000ms. This means requests are coming in and your connection pool cannot serve them fast enough. You can address this by:

  1. Ensuring your database is available and that you can connect to it
  2. Tracking down slow queries and making sure they are running fast enough
  3. Increasing the pool_size (although this increases resource consumption)
  4. Allowing requests to wait longer by increasing :queue_target and :queue_interval

See DBConnection.start_link/2 for more information

Thats what i got when i try to create database.

I also tried to use IP address that I put while creating server in postgres, but it still times out.

My another try was also using docker-compose.yml

version: '3.8'

services:
  postgres_db:
    image: postgres
    volumes:
      - /var/lib/postgresql/data
    container_name: weather
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: weather_dev
    ports:
      - 5432:5432

Accordingly I updated dev.exs to fit those variables and stopped container created meanually (to omit port conflicts). Effect remains the same. Its not possible to connect Elixir with dockerized Postgres and I cant create database for my app.

Thanks for any help :wink:

Marked As Solved

Tyson

Tyson

Most common cause of mismatched credentials when trying to connect to PG in container is that you still have PG running on the host system and are actually connecting to that. Either shut down PG on the host and restart the container, or bind the container port to something other than 5432 (and then configure Ecto to use the new port).

Also Liked

adamu

adamu

For local development I like to use this compose file as a template, which works well with an out of the box phoenix project.

services:
  postgres:
    image: postgres:17
    container_name: postgres
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
    volumes:
      - type: volume
        source: data
        target: /var/lib/postgresql/data
    ports:
      - name: postgres
        target: 5432
        published: 5432

volumes:
  data:
D4no0

D4no0

Is your elixir container part of that docker-compose too? If yes your configuration should work, otherwise you need to specify a custom network, as only containers from the same docker-compose are part of the same network automatically.

Where Next?

Popular in Questions Top

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
myronmarston
The Elixir Typespec docs show the following syntax for keyword lists in typespecs: # ... | [key: type] # keyword lists...
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 Postgres...
New
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
hariharasudhan94
lets say i have a sample like a = 20; b = 10; if (a &gt; b) do {:ok, "a"} end if (a &lt; b) do {:ok, b} end if (a == b) do {:ok, "equa...
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
Emily
I have VueJS GUIs with the project generated using Webpack. I have Elixir modules that will need to be used by the VueJS GUIs. I forese...
New
RisingFromAshes
I’ve read in another post that it may be possible with a router helper - but I couldn’t find an appropriate one, and tbh, I’m still just ...
New
komlanvi
Hi everyone, I was playing with phoenix liveView but I run into an issue. I have a form and want to validate each input text when the te...
New
vonH
In asking this question I am more interested about the expressiveness of the language itself and less concerned about the availability of...
New

Other popular topics Top

electic
Hi, I am new to Elixir. I am trying to use the DateTime component to insert a date into MySQL however the there seems to be no way to fo...
New
josevalim
Hi everyone, One of the features added to Elixir early on to help integration with Erlang code was the idea of overridable function defi...
New
hariharasudhan94
lets say i have a sample like a = 20; b = 10; if (a &gt; b) do {:ok, "a"} end if (a &lt; b) do {:ok, b} end if (a == b) do {:ok, "equa...
New
baxterw3b
Hi guys, i’m new in the Elixir world, and i have to say, that i love it! i’m having some problem to understand anonymous functions with ...
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
jason.o
In the code below, if the create action is not set to accept “extra_key” as an input, it errors out with a message shown above. Is there ...
New
romenigld
I am trying to run a deploy with docker and I successfully runned with this command: docker build -t romenigld/blog-prod . but when I t...
New
shijith.k
I am trying to start a new phoenix project with elixir 1.9, but mix phx.new does not work. It says that ** (Mix) The task "phx.new" could...
New
joaquinalcerro
Hi there, I am working with Ecto-Postgresql and I need to call all of the records from a specific table but the table has 40,000 records...
New
sergio
Kind of like when jquery came out, it was super necessary. Existing drag and drop libraries have a bunch of baggage to support old browse...
New

We're in Beta

About us Mission Statement