Alamgir Qazi
Alamgir Qazi

Reputation: 793

Unable to use Postgres DB in docker-compose - ECONNREFUSED

I have a Node.js app and have set up docker-compose. I'm trying to use Postgres DB in the container.

Here is docker-compose

version: "3"
services:
  web:
    build: .
    ports:
      - "3000:3000"
    links:
      - redis
      - db
  angular: # image of nginx
    image: "qp-angular-nginx"
    ports:
      - "4200:80" # specify port forewarding

  redis:
    image: "redis:3"
    ports:
     - "6379:6379"     
  db:
    image: "postgres:9.6"
    ports:
     - "5432:5432"
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
    volumes:
         - pgdata:/var/lib/postgresql/data         
  dbadmin:
    image: "myimage/phppgadmin"
    ports:
         - "8085:80"
    environment:
        POSTGRES_HOST: db
        POSTGRES_PORT: 5432
volumes: 
     pgdata:

I have the containers running successfully and even database connected, but I get this error when making a DB request

 "stack": {
        "code": "ECONNREFUSED",
        "errno": "ECONNREFUSED",
        "syscall": "connect",
        "address": "127.0.0.1",
        "port": 5432
    }

Upvotes: 4

Views: 1993

Answers (2)

Mor Mountakha Talla
Mor Mountakha Talla

Reputation: 1

For those, you use more recent structure project with a config file like below:

require('dotenv').config();

module.exports = {
    development: {
        username: process.env.DB_USER,
        password: process.env.DB_PASSWORD,
        database: process.env.DB_NAME,
        host: process.env.APP_URL_DOCKER,
        dialect: 'postgres'
    },
    test: {
        username: process.env.DB_USER,
        password: process.env.DB_PASSWORD,
        database: process.env.DB_NAME,
        host: process.env.APP_URL_DOCKER,
        dialect: 'postgres'
    },
    production: {
        username: process.env.DB_USER,
        password: process.env.DB_PASSWORD,
        database: process.env.DB_NAME,
        host: process.env.APP_URL_DOCKER,
        dialect: 'postgres'
    }
};

You can specify the service name of your postgres database in your .envfile. And it should be good for you.

// .env file
APP_URL_LOCAL=127.0.0.1
APP_URL_DOCKER=db # database service name
APP_PORT=8000
APP_KEY=6dd63668dab9a309c7c59a2982126a43b064816925a40b9680d16e2665f41b676a87dae4d506712e6332479c82827993059ddefb607b65caa3534b66b20253ed

DB_USER=postgres
DB_PASSWORD=db_password
DB_NAME=db_name
DB_PORT_CONTAINER=5432
DB_PORT_LOCAL=5433

Upvotes: 0

b0gusb
b0gusb

Reputation: 4731

If you connect to the database from another docker container, use the service name in the connection string(db in your case). From the error message it seems that there is something wrong with your configuration. It tries to connect to localhost (127.0.0.1)

Upvotes: 3

Related Questions