subhadip dutta
subhadip dutta

Reputation: 1

Unable to use POSTGRESQL in docker container, getting ECONNREFUSED

Docker file for my node app

FROM node:latest

COPY . .

RUN npm install

EXPOSE 5000

CMD ["npm", "start"]

docker compose file -

 version: '3'
services: 
    pern-todo-backend:
      image: pern-todo-backend
      ports: 
        - 5000:5000
      command: bash -c 'while !</dev/tcp/db/5432; do sleep 1; done; npm start'
      depends_on:
        - db
      environment:
        - DATABASE_URL=postgres://postgres:*****@db:5432/pern
        - PORT=5000   
    db:
      image: postgres
      ports:
        - 5432:5432
      environment:
        - POSTGRES_USER=postgres
        - POSTGRES_PASSWORD=****
        - POSTGRES_DB=pern
      

when i try to hit the endpoint from postman -

{
    "errno": -111,
    "code": "ECONNREFUSED",
    "syscall": "connect",
    "address": "172.26.0.3",
    "port": 5432
}

I tried updating my pg pool hostname as the name of my container also

const pool = new Pool({
    user : 'postgres',
    password : 'subh1994',
    host : 'localhost',
    port : 5432,
    database : 'pern'
})

I'm new with Docker , please help . thanks

Upvotes: 0

Views: 277

Answers (1)

Ash Ishh
Ash Ishh

Reputation: 588

Can you check your container name of db service by docker ps

It can be different than service name (db), you can try replacing it in DATABASE_URL connection string.

But one weird thing is db is getting resolved to 172.26.0.3 if the db is correct container name then you can try checking logs by docker logs db to get details on what might be wrong.

On side note if you don't want datbase exposed to host you can skip the ports mapping in db service. By default Compose sets up a single network for your app. Each container for a service joins the default network and is both reachable by other containers on that network, and discoverable by them at a hostname identical to the container name. https://docs.docker.com/compose/networking/

Upvotes: 1

Related Questions